07-python-pandas-missingdata

7. Pandas高级教程之:处理缺失数据

简介

在数据处理中,Pandas会将无法解析的数据或者缺失的数据使用NaN来表示。虽然所有的数据都有了相应的表示,但是NaN很明显是无法进行数学运算的。

本文将会讲解Pandas对于NaN数据的处理方法。

NaN的例子

上面讲到了缺失的数据会被表现为NaN,我们来看一个具体的例子:

我们先来构建一个DF:

In [1]: df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],
   ...:                   columns=['one', 'two', 'three'])
   ...: 

In [2]: df['four'] = 'bar'

In [3]: df['five'] = df['one'] > 0

In [4]: df
Out[4]: 
        one       two     three four   five
a  0.469112 -0.282863 -1.509059  bar   True
c -1.135632  1.212112 -0.173215  bar  False
e  0.119209 -1.044236 -0.861849  bar   True
f -2.104569 -0.494929  1.071804  bar  False
h  0.721555 -0.706771 -1.039575  bar   True

上面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中特定的数值:

可以使用插值替换:

本文已收录于 www.flydean.com

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

最后更新于

这有帮助吗?