简介
在数据处理中,pandas会将无法解析的数据或者缺失的数据使用nan来表示。虽然所有的数据都有了相应的表示,但是nan很明显是无法进行数学运算的。
本文将会讲解pandas对于nan数据的处理方法。
nan的例子
上面讲到了缺失的数据会被表现为nan,我们来看一个具体的例子:
我们先来构建一个df:
上面df只有acefh这几个index,我们重新index一下数据:
数据缺失,就会产生很多nan。
为了检测是否nan,可以使用isna()或者notna() 方法。
注意在python中none是相等的:
但是np.nan是不等的:
整数类型的缺失值
nan默认是float类型的,如果是整数类型,我们可以强制进行转换:
datetimes 类型的缺失值
时间类型的缺失值使用nat来表示:
none 和 np.nan 的转换
对于数字类型的,如果赋值为none,那么会转换为相应的nan类型:
如果是对象类型,使用none赋值,会保持原样:
缺失值的计算
缺失值的数学计算还是缺失值:
但是在统计中会将nan当成0来对待。
如果是在cumsum或者cumprod中,默认是会跳过nan,如果不想统计nan,可以加上参数skipna=false
使用fillna填充nan数据
数据分析中,如果有nan数据,那么需要对其进行处理,一种处理方法就是使用fillna来进行填充。
下面填充常量:
还可以指定填充方法,比如pad:
可以指定填充的行数:
fill方法统计:
方法名
描述
pad / ffill
向前填充
bfill / backfill
向后填充
可以使用pandasobject来填充:
上面操作等同于:
使用dropna删除包含na的数据
除了fillna来填充数据之外,还可以使用dropna删除包含na的数据。
插值interpolation
数据分析时候,为了数据的平稳,我们需要一些插值运算interpolate() ,使用起来很简单:
插值函数还可以添加参数,指定插值的方法,比如按时间插值:
按index的float value进行插值:
除了插值series,还可以插值df:
interpolate还接收limit参数,可以指定插值的个数。
使用replace替换值
replace可以替换常量,也可以替换list:
可以替换df中特定的数值:
可以使用插值替换:
本文已收录于 http://www.flydean.com/07-python-pandas-missingdata/ 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现! 欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!