数据清理之重复值、缺失值的基本处理方法
文章目录
- 数据去重
- 检测缺失值
- 缺失值的处理
- 删除
- 缺失值的填补替换
数据去重
python数据清洗中去重常用drop_duplicates函数,下面是它的参数说明
参数名称 | 说明 |
---|---|
subset | 接收string和sequence。表示进行去重的列 |
keep | 接收特定的string。表示去重是保留第几个数据,或者不保留。“first”:保留第一个,“last”:保留最后一个,False:只要有重复都不保留。默认为"first" |
inplace | 接收boolean。表示是否在原表上进行操作。默认为False |
有时候我们在处理重复值之前,可能需要检查一下是否存在重复值,或者重复值出现在哪一个位置上,这个时候我们可以用到duplicated方法来检查,与drop_duplicates不同,它只能检查,而drop_duplicates可以删除。
我们来看一下它们的用法
data = {'name':['a','b','c','a'],'age':[12,12,18,12],'sex':['男','男','女','男'],'score':[59,78,99,59]
}
df3 = DataFrame(data)
df3
现在我们用duplicated方法来检查一下这个表重复的行
df3.duplicated()
检查出了第四行是重复的,那么它对重复行是怎么定义的呢,是所有数据都相同吗?
默认是这样的,但是我们可以通过设置它和drop_duplicates的通用参数subset来定义重复行。
subset接收字段名的字符串,可以任意个数。
我们设置了subset参数后,它就会根据我们给出的字段去检查重复值,只要这些字段的数据是相同,那么就判定为重复值。
下面我们将上面的重复值进行删除
df3.drop_duplicates()
我们使用默认的方法成功将最后一行完全重复的数据给删掉了,这里删掉的是最后一行,如果我们想要删除第一行或者全部删除不保留的话,那么可以手动设置keep参数
df3.drop_duplicates(keep='last') # 保留最后一行
df3.drop_duplicates(keep=False) # 保留最后一行
如果我们设置subset方法,就可以指定哪些字段重复视为重复值
df3.drop_duplicates(subset=['age', 'sex']) # b也被去掉了
还有一点需要注意的,我们用drop_duplicates删除重复值后,它默认是不会改变原本的数据的,只是返回了一个值而已,如果我们需要它直接改变原来的数据的话,可以设置inplace为True,不过我们一般可以用一个新的容器来接收这个返回值,这样又不会伤害原来的数据,也能得到处理后的数据。
检测缺失值
数据中的某个或某些特征的值是不完整的,这些值成为缺失值。一般我们需要对这些缺失值进行处理。
pandas提供了识别缺失值的方法isnull和识别非缺失值的方法notnull,可以结合sum函数使用,检查缺失值的分布和缺失值的个数。
df = DataFrame([[3,4,5], [1,6,np.nan], ['xxj','fff',np.nan],[np.nan,'a','f']])
df.isnull()
可以看到它在缺失值的位置返回了True,非缺失值的地方返回False
notnull与它相反。
我们结果sum函数来看看缺失值的分布和个数
df.isnull().sum()
在哪一列有多少个缺失值都已经很清楚的显示出来了。
如果我们只要得到全部缺失值的个数,不在意它的分布的话,可以连续使用2个sum函数统计出全部缺失值的个数。
缺失值的处理
删除
处理缺失值的第一个方法就是将带有缺失值的数据使用dropna函数删除。
下面表格是该函数参数说明
参数名称 | 说明 |
---|---|
axis | axis=0删除行,axis=1删除列,默认为0 |
how | 可选参数有 ‘any’,和‘all’, 默认 ‘any’,any表示行或列中只要有一个缺失值就清除,all表示要整行都是缺失值才清除, |
thresh | thresh参数接受一个int值,表示保留有n个非空值的行或列 |
subset | subset参数接受一个集合作为值,可以是列表、元组、数组等,表示哪些列或行必须不能有空值,处于这些列或行的空值所处的行或列将被清除 |
inplace | inplace参数接受一个bool的值,表示是否在原数组上操作,如果值为True,那么返回None,并且直接对原数组进行缺失值的清理,否则就只返回一个copy |
df = DataFrame([[3,4,5], [1,6,np.nan], ['xxj',np.nan,np.nan],[np.nan,np.nan,np.nan]])
df
默认的dropna函数会删除所有带有缺失值的行,相当于"how"参数的值为"any"
df.dropna()
我们也可以将“how”的值设置为“all”,这个时候它只会删掉整行都是缺失值的数据
df.dropna(how='all')
如果我们不想一个缺失值就删掉,不不能全部都是缺失值的时候才去删掉,这个时候我们可以用“thresh”参数来设置,当数据至少含有多少个缺失值的时候才删掉
df.dropna(thresh=2)
除了以多少个缺失值作为它删除的依据外,我们还可以自定义哪些字段的数据为缺失值时,进行删除
df.dropna(subset=(0,))
如果我们需要对列进行处理的话,只要将axis设置为1即可,使用方法都是一样的,只不过这个时候它不再识别字段名了,而是识别行索引。
缺失值的填补替换
当缺失值所在的数据比较重要的时候,可能不适合删除,这个时候可以采用填充的方法或者插值的方法,这里讲一下填充缺失值的方法fillna
参数名称 | 说明 |
---|---|
axis | 接收0或1.表示轴向选择,默认为1 |
value | 表示用来替换缺失值的值 |
method | 取值为“backfill”或“bfill”时表示使用下一个非缺失值来填补缺失值。取值为“pad”或“ffill”是表示使用上一个非缺失值来填补缺失值 |
limit | 接收一个int。表示(每行或每列)填补缺失值个数上限,超过这个上限不再继续填补 |
inplace | 是否在原表上进行操作 |
创建带有缺失值的数据
df2 = DataFrame([[3,np.nan,3],[1,2,np.nan],[np.nan,4,'ds'],['f',np.nan,9]])
df2
fillna方法最简单的用法,直接填充一个固定值,可以将所有缺失值都替换为给定的值
df2.fillna('999')
我们还可以使用limit参数来限制它每一列填充的个数,这个时候它就不会全部填充了,你可以根据需要限制填充的个数
df2.fillna(value='999',limit=1)
上面介绍的是全局填充的方式,fillna方法还能设置哪一列填充什么内容,采用字典的形式传参即可,但是这种方法只能针对列也就是axis=0,如果axis=1的话会报错
df2.fillna(value={0:'111',1:222},axis=0) # 必须是axis=0
上面介绍的都是我们自己传一个值进去填补缺失值,但有时候我们自己传入的值可能会破坏数据原本的结构,所以fillna还提供了一个method参数,可以使用表内的值进行填补
我们这里选择了行的轴向,method的值为‘backfill’,表示以缺失值后面的非缺失值来填补,下面的运行结果可以看到,原本的缺失值被他们后面的值给替换了。
但是有一个缺失值没有填补,因为它的后面没有任何非缺失值,也就是说这种填补方法是有局限性的,可能一些在边角的缺失值填补不到
df2.fillna(method='backfill',axis=1)
数据清理之重复值、缺失值的基本处理方法相关推荐
- Python数据分析入门笔记4——数据预处理之重复值
系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...
- python-数据分析-(12)pandas数据清洗、缺失值、重复值、异常值处理常见方法
一.导入模块 import pandas as pd from scipy.interpolate import interp1d 二.读取excel文件 data=pd.read_excel(r'E ...
- python实现数据清洗(重复值+缺失值+异常值处理)
实现功能: python实现数据清洗,对重复记录.缺失值.异常值进行检测,并对其进行处理. 实现代码: # 导入需要的库 import numpy as np import pandas as pdd ...
- c语言讲两个数组合并_两列数据相互去掉重复值后合并
大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并.这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等. 还是先看实例,下面的工作表中A列和 ...
- excel多条件计数python_Excel统计满足条件的不重复值个数的8种方法,第三种方法最适合新手!我真的入门了!...
问题很常见,但是对新手来说又比较棘手,所以我们来一期,系统讲讲,个人我个人的知识储备,大概写了8种,涵盖Excel的方方面面!最后一种也满足一下大家对于Python的好奇! 友情提醒:应该是目前你所能 ...
- [Python] 数据预处理(缺失值、异常值、重复值) [相关方法参数说明、代码示例、相关概念]
前言 系列文章目录 [Python]目录 视频及资料和课件 链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234 提取码:1234 文 ...
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
https://www.toutiao.com/a6711212131125035534/ 导读:在数据清洗过程中,主要处理的是缺失值.异常值和重复值.所谓清洗,是对数据集通过丢弃.填充.替换.去重等 ...
- pandas的自带数据集_用Python和Pandas进行数据清理:检测丢失值
数据清理是一个非常耗时的任务,在应用机器学习模型之前,你需要获得待处理的数据,然后你会意识到这些数据是一团乱麻. 根据IBM数据分析的观点 -- 数据科学家花费80%的时间来寻找.清理和组织数据上,只 ...
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
01 数据列缺失的4种处理方法 数据缺失分为两种:一种是行记录的缺失,这种情况又称数据记录丢失:另一种是数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺. 不同的数据存储和环境中对于缺失 ...
最新文章
- NASA打算送机器蜜蜂去探索火星上的生命痕迹
- python 修改文件名_【学习分享】利用python批量修改文件名
- 使用js实现放大镜效果
- boost::polygon模块实现多边形间隔相关的测试程序
- Python入门:局部变量与全局变量2
- 降级!调离!取消研究生导师资格!西南交大发布最新通报,多人被问责
- 利用IDEA部署过的Tomcat开发Web Service
- 蒙特卡罗方法介绍( 二)
- java和vb.net des加密_vb.net DES加密与解密
- java 上传断点续传_JAVA大文件上传断点续传解决方案
- scratch课程案例——漫天飞雪
- ActiveMQ 下载与安装
- app测试和接口测试区别
- 设计师思维模式你get到多少个?
- 2017艾普兰机智云全家福
- 如何在 iPhone 上恢复已删除的短信
- 基于C#在WPF中使用斑马打印机进行打印
- java null转空_Java对象为空时,将null转换为 保存值为空的属性
- NCX SQL编程规范
- 2021年茶艺师(中级)最新解析及茶艺师(中级)考试总结