fillna()函数的用法

fillna(axis,mthod,limit,inplace)

axis:这个参数取1时,表示按照行来填充,取0时表示按照列来填充。默认为0,即按照列。和dropna函数的刚好相反。

method:这个参数的意思是填充的方式,如果为‘ffill’,则是将这个空值的前一个数据复制给这个空值;如果为‘bfill’,则是将这个空值的后一个数据复制给这个空值。如果不用这个参数,不声明即可。

limit:这个参数时限制填充的空值的个数,比如某一列有两个空值,我这里指定只填充一个空值,另一个空值不管它。

一、不指定任何参数的情况下进行缺失值填充

# 用常数填充
>>> df.fillna(100)
       0      1      2
0    1.0    2.0    3.0
1  100.0  100.0    3.0
2  100.0  100.0  100.0
>>> df
     0    1    2
0  1.0  2.0  3.0
1  NaN  NaN  3.0
2  NaN  NaN  NaN
 
# 用字典填充
>>> df.fillna({0:1,1:2,2:3})
     0    1    2
0  1.0  2.0  3.0
1  1.0  2.0  3.0
2  1.0  2.0  3.0
>>> df
     0    1    2
0  1.0  2.0  3.0
1  NaN  NaN  3.0
2  NaN  NaN  NaN
 
# 可以看到在不指定任何参数的情况下进行缺失值填充,原对象df并没有发生改变

二、指定参数的情况下进行缺失值填充

2.1指定inplace参数

# 指定inplace参数
>>> df.fillna(0,inplace=True) # df对象发生改变
>>> df
     0    1    2
0  1.0  2.0  3.0
1  0.0  0.0  3.0
2  0.0  0.0  0.0

2.2指定method参数

# 指定method参数
>>> df.iloc[1,1] = NaN
>>> df
     0    1    2
0  1.0  2.0  3.0
1  0.0  NaN  3.0
2  0.0  0.0  0.0
>>> df.fillna(method='ffill') # 用前一个非缺失值填充该缺失值
     0    1    2
0  1.0  2.0  3.0
1  0.0  2.0  3.0
2  0.0  0.0  0.0
>>> df.iloc[1,1] = NaN
>>> df
     0    1    2
0  1.0  2.0  3.0
1  0.0  NaN  3.0
2  0.0  0.0  0.0
>>> df.fillna(method='bfill') # 用下一个非缺失值填充该对象
     0    1    2
0  1.0  2.0  3.0
1  0.0  0.0  3.0
2  0.0  0.0  0.0

2.3指定limit参数

# 指定limit参数
>>> df.iloc[1,1] = NaN
>>> df.iloc[0,1] = NaN
>>> df
     0    1    2
0  1.0  NaN  3.0
1  0.0  NaN  3.0
2  0.0  0.0  0.0
>>> df.fillna(method='bfill',limit=1) # 用下一个非缺失值填充,只能填充一个
     0    1    2
0  1.0  NaN  3.0
1  0.0  0.0  3.0
2  0.0  0.0  0.0

2.4指定axis参数

# 指定axis参数,注意必须至少和value或method一块使用
>>> df
     0    1    2
0  1.0  NaN  3.0
1  0.0  NaN  3.0
2  0.0  0.0  0.0
>>> df.fillna(2,axis=1)
     0    1    2
0  1.0  2.0  3.0
1  0.0  2.0  3.0
2  0.0  0.0  0.0
>>> df.fillna(2,axis=0)
     0    1    2
0  1.0  2.0  3.0
1  0.0  2.0  3.0
2  0.0  0.0  0.0
>>> df.iloc[0,2] = NaN
>>> df
     0    1    2
0  1.0  NaN  NaN
1  0.0  NaN  3.0
2  0.0  0.0  0.0
>>> df.fillna(2,axis=1)
     0    1    2
0  1.0  2.0  2.0
1  0.0  2.0  3.0
2  0.0  0.0  0.0
>>> df.fillna(2,axis=0)
     0    1    2
0  1.0  2.0  2.0
1  0.0  2.0  3.0
2  0.0  0.0  0.0
# 和value一块使用时,效果上看不出来区别



# 和method一块使用时,效果如下
>>> df
     0    1    2
0  1.0  NaN  NaN
1  0.0  NaN  3.0
2  0.0  0.0  0.0
>>> df.fillna(axis=0,method='bfill') # 按列填充,使用下一行非缺失值填充
     0    1    2
0  1.0  0.0  3.0
1  0.0  0.0  3.0
2  0.0  0.0  0.0
>>> df
     0    1    2
0  1.0  NaN  NaN
1  0.0  NaN  3.0
2  0.0  0.0  0.0
>>> df.fillna(axis=1,method='bfill') # 按行填充,用下一列非缺失值填充
     0    1    2
0  1.0  NaN  NaN
1  0.0  3.0  3.0
2  0.0  0.0  0.0



# 联合limit表示每行或每列限制填充的个数
>>> df.iloc[0,2] = 3
>>> df
     0    1    2
0  1.0  NaN  3.0
1  0.0  NaN  3.0
2  0.0  0.0  0.0

# 按行填充,每行填充一个,用前一列非缺失值填充
>>> df.fillna(method='ffill',limit=1,axis=1) 
     0    1    2
0  1.0  1.0  3.0
1  0.0  0.0  3.0
2  0.0  0.0  0.0
# 按列填充,每列填充一个,用前一列非缺失值填充,前一行无,所以未改变
>>> df.fillna(method='ffill',limit=1,axis=0)
     0    1    2
0  1.0  NaN  3.0
1  0.0  NaN  3.0
2  0.0  0.0  0.0
# 按列填充,用下一行非缺失值填充,总共一列缺失,两个缺失值,limit=1限制只能填充一个
>>> df.fillna(method='bfill',limit=1,axis=0)
     0    1    2
0  1.0  NaN  3.0
1  0.0  0.0  3.0
2  0.0  0.0  0.0
>>> df.iloc[0,2] = NaN
>>> df
     0    1    2
0  1.0  NaN  NaN
1  0.0  NaN  3.0
2  0.0  0.0  0.0
# 按列填充,每列填充一个,用后一行非缺失值填充
>>> df.fillna(method='bfill',limit=1,axis=0)
     0    1    2
0  1.0  NaN  3.0
1  0.0  0.0  3.0
2  0.0  0.0  0.0
'''
 从上面的代码演示中可以看到一块使用axis,method,limit参数时,
limit限制的是每行或每列(axis=1或axis=0)可以填充的个数,
method表示使用前一列/后一列或前一行或后一行非缺失值来填充缺失值
'''