原文链接:风一带你一起学习:数据清洗_缺失值处理

碎碎念念:大家好!我是风一、有人调侃做数据的、80%的时间都是花在数据清洗上、虽然有时很想反驳一下、但现实确实经常是如此,那么何为数据清洗?需要处理的数据主要又有哪些?那么就让我们开始吧!

所谓的清洗,是对数据集通过丢弃、填充、替换、去重等操作,达到去除异常、纠正错误、补足缺失的目的;在数据清洗的过程中、主要需要处理的有缺失值、异常值和重复值,以下篇幅为数据缺失值处理。

一、数据缺失的两种情况:

一种是行记录的缺失,这种情况又称为数据记录的丢失;另一种是数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺 。

二、数据缺失的常用处理思路

缺失的数据记录通常都是无法找回的、那么针对数据列类型的缺失值数据、需如何处理?

  • 直接丢弃:也就是删除带有缺失值的行记录(整行删除)或者列字段 (整列删除),通过直接删除这种方法非常简单明了、处理起来也特别的方便,但删除就意味着会消减数据的维度、特征;尤其是存在大量的缺失值 或者 带有缺失值的数据记录存在着明显的数据分布规律或特征,这些场景下都不宜直接丢弃缺失值。

  • 补全缺失值:相比直接删除而言、补全是更常用的缺失值处理方法。通过统计值(均值、中位数等)、预测值、专家补全等方法将缺失的数据补全、使数据达成一个完整的数据结构、对于后续的数据处理、分析和建模至关重要。

  • 真值转化法:在很多场景中、是无法得知缺失值的分布规律,并且无法直接对缺失值做补全删除等处理;那么我们认为数据缺失也是一种规律,去承认缺失值的存在,比如用户性别字段、部分数据的性别是不全的,但又不能直接丢弃或者补全、那么就可以将其中的值分布状态转换为多个变量的真值状态(转换前:一个字段(值为 男、女、未知); 转换后:多个字段 、男 (1 或 0)、 女 (1 或 0)、 未知 (1 或 0) )。

  • 不做任何处理:一般而言、这类缺失值不涉及到业务所比较关键的字段 或者不影响到后期的数据分析和建模应用,很多模型对于缺失值有容忍度或灵活的处理方法,比如:KNN、决策树等等。

三、代码实练

在缺失值的处理上、主要配合使用 sklearn.preprocessing 中 的 Imputer 类、Pandas 和 Numpy。

3.1.导入所需库并生成缺失数据

import pandas as pd
import numpy as np
# from sklearn.preprocessing import Imputer # 老版本# Sklearn 专门处理缺失值的模块、官网地址:https://www.jianshu.com/p/2c59147e1df1
from sklearn.impute import SimpleImputer as Imputer
df = pd.DataFrame(np.random.randn(6, 4), columns = ['col1', 'col2', 'col3', 'col4'])
df.iloc[1:2, 1] = np.nan
df.iloc[4, 3] = np.nandf

图片

3.2.判断缺失值

nan_all = df.isnull()  # 获取所有数据框中的 N 值(N值为 Trure)
print(nan_all)
print('*'*30)col_all = df.isnull().sum()  # 统计每列缺失值的数量
print(col_all)
print('*'*30)nan_col1 = df.isnull().all() # 获得全部为 NA 的列
print(nan_col1)
print('*'*30)nan_col2 = df.isnull().any() # 获得含有 NA 的列
print(nan_col2)
    col1   col2   col3   col4
0  False  False  False  False
1  False   True  False  False
2  False  False  False  False
3  False  False  False  False
4  False  False  False   True
5  False  False  False  False
******************************
col1    0
col2    1
col3    0
col4    1
dtype: int64
******************************
col1    False
col2    False
col3    False
col4    False
dtype: bool
******************************
col1    False
col2     True
col3    False
col4     True
dtype: bool

3.3.丢弃缺失值

df2 = df.dropna(how = "any")   # 直接删除含有 NA 的行记录
print(df2)
print('*'*30)df3 = df.copy()
df3.iloc[1:2,:] = np.nan  # 将第二行都设置为 NA
df3 = df3.dropna(how = "all")  # 删除全部为 NA 值的行记录
print(df3)
       col1      col2      col3      col4
0 -0.530849 -0.587055  0.754068  0.597813
2  0.146497  0.625747 -1.663007 -1.356476
3 -0.699932  0.390106  1.342162 -2.133165
5 -0.549286 -0.300173  1.889540  1.178008
******************************col1      col2      col3      col4
0 -0.530849 -0.587055  0.754068  0.597813
2  0.146497  0.625747 -1.663007 -1.356476
3 -0.699932  0.390106  1.342162 -2.133165
4 -0.395517 -0.172803  0.233490       NaN
5 -0.549286 -0.300173  1.889540  1.178008
df

3.4.通过 sklearn 的数据预处理方法对缺失值进行处理

# 官网地址:https://scikit-learn.org/stable/modules/impute.html
nan_model = Imputer(missing_values = np.nan, strategy = 'mean') # 建立替换规则:将值为 NaN 的缺失值以均值做替换
nan_result = nan_model.fit_transform(df)
print(nan_result)
[[-0.53084907 -0.58705498  0.75406835  0.59781252][ 0.33872081 -0.00883559  2.19513579  1.79174735][ 0.14649702  0.62574696 -1.66300695 -1.35647607][-0.69993206  0.39010577  1.34216247 -2.13316465][-0.39551654 -0.17280315  0.23349011  0.01558536][-0.54928642 -0.30017256  1.88954049  1.17800765]]

注意事项:missing_values 默认空值 np.nan, 指定空值需 np.nan、直接写 ‘NaN’ 是不一样的、会报错。

strategy参数:

图片:

3.5.使用 Pandas 做缺失值处理

Pandas 对缺失值的处理方法是 df.fillna(),该方法中最主要的两个参数是 value 和 method。前者通过固定(或手动指定)的值替换缺失值,后者使用 pandas 提供默认方法替换缺失值。

''' DataFrame
def fillna(self,value=None, # 指定填充的值,可以是一个标量,或者字典等method=None, # 指定填充的方法; [pad/ffill、 backfill/bfill、 None]axis=None, # 指定轴inplace=False, # 是否将结果赋值给原变量limit=None,  # 限制每列替换缺失值的个数
):'''
nan_result_pd1 = df.fillna(method = 'backfill')  # 使用后面的值替换缺失值
nan_result_pd1
       col1      col2      col3      col4
0 -0.530849 -0.587055  0.754068  0.597813
1  0.338721  0.625747  2.195136  1.791747
2  0.146497  0.625747 -1.663007 -1.356476
3 -0.699932  0.390106  1.342162 -2.133165
4 -0.395517 -0.172803  0.233490  1.178008
5 -0.549286 -0.300173  1.889540  1.178008

四、总结

在现实数据中、很容易出现缺失数据,尤其是数据维度特别大的情况下;那么针对不同类型、不同的业务数据当然会有不同的方法;有些可以确认无效数据可以直接删除、但往往大部分都是无法直接这样简单明了处理、需结合实际业务以及数据结构进行处理、这里风一就不一一展开详解。

说明:文章大部分篇幅来源于宋老师(宋天龙)所著书籍《Python数据分析与数据化运营》的读书笔记以及相应的学习扩展补充。

作者:在成长的风一
文章首发:公众号【在成长的风一】
未经允许禁止转载,需要转载请微信联系授权(微信号:Fy180920)

数据清洗_缺失值处理相关推荐

  1. 机器学习数据清洗之缺失值处理、缺失的原因、缺失值删除、缺失值填充、KNN填充

    机器学习数据清洗之缺失值处理.缺失的原因.缺失值删除.缺失值填充.KNN填充 目录

  2. R语言——数据清洗之缺失值处理

    数据清洗之缺失值--R语言 缺失值处理步骤: 1)识别缺失数据: 2)检查导致数据缺失的原因: 3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值 缺失值数据的分类: 1)完全随机缺失:若某变量 ...

  3. 数据清洗_第一篇 缺失值处理(2)_样条函数 Spline function

    目录 1. 样条函数定义 2. 样条曲线简介 3.  样条插值法 4.   三次样条曲线 1. 样条函数定义 样条是一种特殊的函数,由多项式分段定义.在插值问题中,样条插值通常比多项式插值好用.用低阶 ...

  4. ​一文看懂数据清洗:缺失值、异常值和重复值的处理

    https://www.toutiao.com/a6711212131125035534/ 导读:在数据清洗过程中,主要处理的是缺失值.异常值和重复值.所谓清洗,是对数据集通过丢弃.填充.替换.去重等 ...

  5. R语言 数据清洗(缺失值处理、异常值处理)

    关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 详细内容为 <R语言游戏数据分析与挖掘>第五章学习笔记之数据清洗 5.2.1 缺失值处理  5.2.2 异常值处理: setwd( ...

  6. python-数据分析-(12)pandas数据清洗、缺失值、重复值、异常值处理常见方法

    一.导入模块 import pandas as pd from scipy.interpolate import interp1d 二.读取excel文件 data=pd.read_excel(r'E ...

  7. 【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)

    文章目录 1. 数据合并 1.1 merge()合并 1.2 concat()合并 1.3 combine()合并 2. 数据清洗 2.1 缺失值 2.2 重复值 2.3 内容与格式清洗 1. 数据合 ...

  8. python3爬取网易云歌单数据清洗_实例 | 使用网易云音乐数据演示数据整合与数据清洗...

    作者 | 小F 来源 | 法纳斯特(walker398) 数据整合是对数据进行行列选择.创建.删除等操作. 数据清洗则是将整合好的数据去除其中的错误和异常. 本文利用之前获取的网易云音乐用户数据,来简 ...

  9. 一文看懂数据清洗:缺失值、异常值和重复值的处理

    01  数据列缺失的4种处理方法 数据缺失分为两种:一种是行记录的缺失,这种情况又称数据记录丢失:另一种是数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺. 不同的数据存储和环境中对于缺失 ...

  10. 数据清洗:缺失值,异常值和重复值的处理

     在数据清洗过程中,主要处理的是缺失值,异常值和重复值.所谓清洗,是对数据进行丢弃,填充,替换,去重等操作,实现去除异常,纠正错误,补足缺失的目的. 1. 数据列缺失的4种处理方法  数据缺失分为2种 ...

最新文章

  1. mysql表文件被删_mysql表物理文件被误删的解决方法
  2. 什么是REST?以及RESTful的实现(转)
  3. redis和memcached缓存
  4. 计算机考试设计会议邀请函,计算机二级常见考点之使用合并技术制作邀请函
  5. Golang Tips
  6. PyTorch官方权威教程书来了,LeCun力荐!意外的通俗易懂
  7. Leetcode 742.二叉树最近的叶子结点
  8. 果园机器人的写作思路_《果园机器人》三年级教学设计
  9. Hive几种导出数据方式
  10. Office2007 三合一绿色精简版
  11. rmvb 转 avi 方法
  12. camel研究_【卡瑞利珠单抗·CameL研究者说】任秀宝教授:卡瑞利珠单抗治疗NSCLC疗效与安全性俱佳,受指南重磅推荐后再获批肺癌适应症...
  13. Linux系统在Xshell6布置定时任务
  14. 项目经理不得不知道的里程碑计划及其重要用途
  15. 上汽拿下国内首张道路测试用牌照
  16. 一个前端资源站 http://www.bootcss.com/
  17. VMware没有未桥接的主机网络适配器,VMware bridge protocol服务卸载不掉
  18. 国产免费虚拟化OVM与 OpenStack对比
  19. 【Java】 杨辉三角 二维数组打印杨辉三角
  20. 嵌入式开发中,嵌入式硬件和软件有什么区别?

热门文章

  1. 设定计算机锁定时间,如何设置电脑自动锁屏时间?
  2. 如何实现向APP推送消息
  3. p9plus升级鸿蒙教程,华为P9 Plus(VIE-AL10 全网通 EMUI 5.0)一键ROOT图文详解教程
  4. springboot启动报错@Bean definition illegally overridden by existing bean definition
  5. 结构体定义的几种方式
  6. 2013年4月小游戏行业网站综合影响力排名
  7. 苹果logo_苹果 ARM Mac 发布会独特标志 Logo 亮相:橙色、红色、紫色和蓝色色调...
  8. Visio画正态分布曲线
  9. 信息系统与信息化、信息系统开发方法、常规信息系统集成技术
  10. ln: creating hard link 问题