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表示使用前一列/后一列或前一行或后一行非缺失值来填充缺失值
'''