数据清洗_缺失值处理
原文链接:风一带你一起学习:数据清洗_缺失值处理
碎碎念念:大家好!我是风一、有人调侃做数据的、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)
数据清洗_缺失值处理相关推荐
- 机器学习数据清洗之缺失值处理、缺失的原因、缺失值删除、缺失值填充、KNN填充
机器学习数据清洗之缺失值处理.缺失的原因.缺失值删除.缺失值填充.KNN填充 目录
- R语言——数据清洗之缺失值处理
数据清洗之缺失值--R语言 缺失值处理步骤: 1)识别缺失数据: 2)检查导致数据缺失的原因: 3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值 缺失值数据的分类: 1)完全随机缺失:若某变量 ...
- 数据清洗_第一篇 缺失值处理(2)_样条函数 Spline function
目录 1. 样条函数定义 2. 样条曲线简介 3. 样条插值法 4. 三次样条曲线 1. 样条函数定义 样条是一种特殊的函数,由多项式分段定义.在插值问题中,样条插值通常比多项式插值好用.用低阶 ...
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
https://www.toutiao.com/a6711212131125035534/ 导读:在数据清洗过程中,主要处理的是缺失值.异常值和重复值.所谓清洗,是对数据集通过丢弃.填充.替换.去重等 ...
- R语言 数据清洗(缺失值处理、异常值处理)
关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 详细内容为 <R语言游戏数据分析与挖掘>第五章学习笔记之数据清洗 5.2.1 缺失值处理 5.2.2 异常值处理: setwd( ...
- python-数据分析-(12)pandas数据清洗、缺失值、重复值、异常值处理常见方法
一.导入模块 import pandas as pd from scipy.interpolate import interp1d 二.读取excel文件 data=pd.read_excel(r'E ...
- 【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)
文章目录 1. 数据合并 1.1 merge()合并 1.2 concat()合并 1.3 combine()合并 2. 数据清洗 2.1 缺失值 2.2 重复值 2.3 内容与格式清洗 1. 数据合 ...
- python3爬取网易云歌单数据清洗_实例 | 使用网易云音乐数据演示数据整合与数据清洗...
作者 | 小F 来源 | 法纳斯特(walker398) 数据整合是对数据进行行列选择.创建.删除等操作. 数据清洗则是将整合好的数据去除其中的错误和异常. 本文利用之前获取的网易云音乐用户数据,来简 ...
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
01 数据列缺失的4种处理方法 数据缺失分为两种:一种是行记录的缺失,这种情况又称数据记录丢失:另一种是数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺. 不同的数据存储和环境中对于缺失 ...
- 数据清洗:缺失值,异常值和重复值的处理
在数据清洗过程中,主要处理的是缺失值,异常值和重复值.所谓清洗,是对数据进行丢弃,填充,替换,去重等操作,实现去除异常,纠正错误,补足缺失的目的. 1. 数据列缺失的4种处理方法 数据缺失分为2种 ...
最新文章
- mysql表文件被删_mysql表物理文件被误删的解决方法
- 什么是REST?以及RESTful的实现(转)
- redis和memcached缓存
- 计算机考试设计会议邀请函,计算机二级常见考点之使用合并技术制作邀请函
- Golang Tips
- PyTorch官方权威教程书来了,LeCun力荐!意外的通俗易懂
- Leetcode 742.二叉树最近的叶子结点
- 果园机器人的写作思路_《果园机器人》三年级教学设计
- Hive几种导出数据方式
- Office2007 三合一绿色精简版
- rmvb 转 avi 方法
- camel研究_【卡瑞利珠单抗·CameL研究者说】任秀宝教授:卡瑞利珠单抗治疗NSCLC疗效与安全性俱佳,受指南重磅推荐后再获批肺癌适应症...
- Linux系统在Xshell6布置定时任务
- 项目经理不得不知道的里程碑计划及其重要用途
- 上汽拿下国内首张道路测试用牌照
- 一个前端资源站 http://www.bootcss.com/
- VMware没有未桥接的主机网络适配器,VMware bridge protocol服务卸载不掉
- 国产免费虚拟化OVM与 OpenStack对比
- 【Java】 杨辉三角 二维数组打印杨辉三角
- 嵌入式开发中,嵌入式硬件和软件有什么区别?
热门文章
- 设定计算机锁定时间,如何设置电脑自动锁屏时间?
- 如何实现向APP推送消息
- p9plus升级鸿蒙教程,华为P9 Plus(VIE-AL10 全网通 EMUI 5.0)一键ROOT图文详解教程
- springboot启动报错@Bean definition illegally overridden by existing bean definition
- 结构体定义的几种方式
- 2013年4月小游戏行业网站综合影响力排名
- 苹果logo_苹果 ARM Mac 发布会独特标志 Logo 亮相:橙色、红色、紫色和蓝色色调...
- Visio画正态分布曲线
- 信息系统与信息化、信息系统开发方法、常规信息系统集成技术
- ln: creating hard link 问题