pandas 缺失值的识别和处理
dataframe 中的缺失值非常常见,很有必要掌握精准识别和处理确实值的技巧。
识别缺失值
pandas 会将诸如 NaN
、null
、None
、NA
等值视为缺失值,但是在实践中,类似 init
、暂无
、缺失
等这样的值,我们也视为缺失值,怎么把这个认知喂给 pandas 呢,有两个办法。
第一种方法是在读取文件时,比如 read_csv()
,有一个参数 na_values
,它接受一个 list 列表,里面的每一个值就是我们要新增的缺失值。
1 | df = pd.read_csv('demo.csv',na_values=['init','暂无']) |
第二个方法是读取文件后,使用 replace,如果有很多个,不可避免要使用 for 循环
1 | df.replace('init', np.nan, inplace=True) |
处理缺失值
两种思路,一种是去除缺失值、另外一种是填充缺失值。
去除缺失值
dataframe 内置了这个方法 dropna()
,第一个参数 axis 是老生常谈的了,会经常遇到,简单来说 axis =0 (默认值)就是一行一行的处理,axis=1 就是一列一列的处理;第二个参数 inplace 更加常见,取值 False(默认值) 时返回修改后的 dataframe,取值 True 意即原地修改,也就没有返回值。最后一个参数 how 取值为 all
、any
之一,前一个意思为如果这一行所有的 item 都是缺失值才去除,后者条件更加宽松:只有某一行有一个 item 是缺失值就去除。
填充缺失值
常见的填充方式也有两种,第一种是使用同列的平均值、或者中位数填充。
1 | # price 列的缺失值用均值代替 |
另外一种是在该列使用插值,此种方式更为优雅。
1 | df['price'] = df['price'].interpolate(method='linear') |
method 可以取值为:
slinear
、linear
:线性插值nearest
:最邻近插值法- 更多取值的可以参考官方文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BuyiXiao's Blog!
评论
ValineDisqus