python数据清洗,如何使用df.dropna()删除缺失值相关数据?
发布于 作者:苏南大叔 来源:程序如此灵动~

面对存在缺失值的数据,有两种选择。一个是给它填充上合理的数据,另外一个就是删除掉相关的数据。本文说的是第二种情况,删除掉数据集的缺失值相关数据,这里说的是“相关数据”,那么意思就是会有正常的数据被主动误伤。

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8
,pandas@1.1.5
,numpy@1.24.4
。
函数原型
axis
,表示删除行还是列。默认值为0,表示删除包含缺失值的行;设置为1表示删除包含缺失值的列。how
,表示删除的条件。默认值为’any’,表示只要存在一个缺失值就删除整行或整列;设置为’all’表示只有当整行或整列都是缺失值时才删除。thresh
,表示在删除之前需要满足的非缺失值的最小数量。如果行或列中的非缺失值数量小于等于thresh,则会被删除。subset
,用于指定要检查缺失值的特定列名或行索引。inplace
,表示是否对原始数据进行就地修改。默认值为False,表示不修改原始数据,而是返回一个新的数据框。
注意:默认情况下,不修改原df
,而是返回一个新的df
!所以,需要用一个新的变量去承载一下。
测试用例
输出:
值得特别说明的是:none
经过dataframe
的处理,也变成了NaN
。没转换的那个none
,是个字符串。

不传递参数,默认
一个参数也不传递的话,就是最常见的用法。
输出:
效果就是:删除掉所有和NaN
或者None
相关的数据行(一条数据记录),注意不是列。如果对应到数据库里面的话,就很好理解了。把所有有瑕疵的数据全部删掉,以行(一条数据)为单位。
axis删除行或列
axis
默认必然是0
,删除的必须是行,这个很好理解。如果改成1
,效果是:某个特征中含有Na
数据的话,就删除整个特征。个人觉得不是很合理。
输出:
只有name
列是全员没有缺失值的。
how删除的标准
how
默认是any
,意思是有na
数据就删除。改成all
的话,意思是整行或者整列(被axis
控制)的数据,全部有问题的时候,全部删除。
个人认为,how='all'
应该和axis=1
合用。因为:
- 一条记录里面,有
na
数据,删除合理。默认:axis=0,how='any'
。 - 一列数据里面,全部为
na
数据,删除才合理。axis=1,how='all'
。
输出:
只有全为Na
(how='all'
)的最后一列数据(axis=1
)被删除。
thresh非缺失值的最大数(不包含)
dropna()
的thresh
参数,和fillna()
的limit
参数,很相似。意思是:对应行或者列(axis
控制)里面的【非缺失值】数据,【小于】thresh
数的时候,才能被删除。
某种意义上来说,和how
参数的管辖范围有重合。
一行数据中,非缺失值数量小于2的情况。输出:
一列数据中,非缺失值数量小于4的情况。输出:
subset检测缺失值的行或列
类型是集合,默认查找na
值的范围是全部,这里指出仅仅检测其中的某几行某几列,所以变量类型是个集合。
age
列中有缺失值的行被删除。
输出:
1,2行数据中,有缺失值的列,被删除【典型的株连九族类型】。输出:
相关文章
- https://newsn.net/say/python-fillna.html
- https://newsn.net/say/python-isnone.html
- https://newsn.net/say/python-isnan.html
结语
更多python
经验文章,请参考:


