很多时候我们需要将缺失值替换成有效的数值。有效的值可能是像 0、1、2 那样单独的值,也可能是经过填充(imputation)或转换(interpolation)得到的。
虽然可以通过 isnull() 方法建立掩码来填充缺失值,但是 Pandas 为此专门提供了一个fillna() 方法,它将返回填充了缺失值后的数组副本。
来用下面的 Series 演示:

data = pd.Series([1, np.nan, 2, None, 3], index=list('abcde')) 
print(data)

输出结果如下所示:

 a 1.0 
 b NaN 
 c 2.0 
 d NaN 
 e 3.0 
 dtype: float64

我们将用一个单独的值来填充缺失值,例如用 0:

In[24]: data.fillna(0) 

输出结果如下所示:

 a 1.0 
 b 0.0 
 c 2.0 
 d 0.0 
 e 3.0 
 dtype: float64

可以用缺失值前面的有效值来从前往后填充(forward-fill):

# 从前往后填充
data.fillna(method='ffill') 

输出结果如下所示:

 a 1.0 
 b 1.0 
 c 2.0 
 d 2.0 
 e 3.0 
 dtype: float64

也可以用缺失值后面的有效值来从后往前填充(back-fill):

# 从后往前填充
data.fillna(method='bfill') 

输出结果如下所示:

 a 1.0 
 b 2.0 
 c 2.0 
 d 3.0 
 e 3.0 
 dtype: float64

DataFrame 的操作方法与 Series 类似,只是在填充时需要设置坐标轴参数 axis:

print(df)

输出结果如下所示:

   0   1   2 3 
 0 1.0 NaN 2 NaN 
 1 2.0 3.0 5 NaN 
 2 NaN 4.0 6 NaN 
df.fillna(method='ffill', axis=1) 

输出结果如下所示:

   0   1   2   3 
 0 1.0 1.0 2.0 2.0 
 1 2.0 3.0 5.0 5.0 
 2 NaN 4.0 6.0 6.0

需要注意的是,假如在从前往后填充时,需要填充的缺失值前面没有值,那么它就仍然是缺失值。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐