python数据清洗,如何使用df.fillna()来填充缺失数据?
发布于 作者:苏南大叔 来源:程序如此灵动~

数据集里面经常有缺失的数据,包括NaN
和None
。怎么改如何对这些缺失的值进行处理呢?可以删除不合理的数据,也可以选择填充上合理的数据。本文采用的方法就是.fillna()
,也就是建立在数据填充的基础上。

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8
,pandas@1.1.5
,numpy@1.24.4
。
fillna原型
机器学习的时候,原始数据集的处理。就大量涉及缺失值处理的问题,也就是.fillna()
的问题。参数很多,不过都用不到,本文就讲述前两个参数value
和method
。后面的参数,待后续文章补充。
关于不合理的值有很多种,其中缺失值NaN
仅仅是其中的一种。并且本文的.fillna()
所针对的数据,也就是出现在dataframe
里面的NaN
和None
,并不能处理其它的数据。这是本文写作的基本前提。
填充固定值
value
,可以填充固定的值,
这里给nan
改名的操作,真的很推荐,避免了大小写转化带来的认知上的混淆。

填充集合值
也可以填充一个dataframe
或者series
或者set
,但是要求对应的索引要相同,效果类似个数组合并的效果。
填充前一个非空值【可能效果不完美】
ffill
/pad
,前面一个非缺失值作为value
:

填充后一个非空值【可能效果不完美】
bfill
/backfill
,后面一个非缺失值作为value
:
填充平均值
在实际的操作中,经常为一个列的NA
数据,填充对应列的平均数。比如:
输出:
填充中位数
中位数可不是平均数,但是有的时候,两者相等。在下面的代码中,可以仔细体会。
输出:
对于中位数来说,如果存在最中间的那个数,那么中位数就是最中间的那个数。如果不存在,那么就是最中间的那两个数相加除以2。所以,结论是:中位数可能是平均数,也可能不是。可能是真实存在的数,也可能不是。平均数的时候,是最中间的两个数的平均数,而不包括收尾。
谁前谁后
axis
默认为0
,改成1
之后,这个前后的标准就变了。虽然能执行成功,但是,从数据集的角度来说,这个数据集似乎就不对的,用了另外一列(比如:age
)的数据填充到本列(比如:name
)。是不是更加混乱了呢?
这个大家有不同意见的话,可以留言给我。
相关文章
关于缺失值NaN
的判断,可以参考文章:
关于如何求解平均数或中位数,可以参考文章:
更多文章
更多python
相关经验文章,请参考苏南大叔的博客:


