fillna()函数
fillna()函数的用法
·
fillna函数:
作用:补充缺失值
参数:fillna(inplace,method,limit,axis)
参数解释+代码演示
自定义DataFrame类型的数据
>>> import pandas as pd
>>> import numpy as np
>>> from numpy import nan as NaN
>>> df = pd.DataFrame([[1,2,3],[NaN,NaN,3],[NaN,NaN,NaN]])
>>> df
0 1 2
0 1.0 2.0 3.0
1 NaN NaN 3.0
2 NaN NaN NaN
一、不指定任何参数的情况下进行缺失值填充
# 用常数填充
>>> 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并没有发生改变
二、指定参数的情况下进行缺失值填充
1、inplace参数的取值:True、False
True:直接修改原对象
Fasle:创建一个副本,修改副本,原对象不变(缺失默认)
# 指定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、method参数的取值:{'pad','ffill','backfill','bfill','None'}
pad/ffill:用前一个非缺失值去填充该缺失值
backfill/bfill:用下一个非缺失值填充该缺失值
None:指定一个值去替换缺失值(缺失默认)
# 指定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
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
4、axis参数:修改填充方向
1:按行填充;0:按列填充
# 指定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表示使用前一列/后一列或前一行或后一行非缺失值来填充缺失值
'''
总结:
在机器学习中,当数据有缺失时,如果直接删除某行或某列的数据一般是不可取的,特别当数据量偏小的时候,一般用前一个或下一个非缺失值填充缺失值,或使用均值填充缺失值,填充的语句和参数解释可参考上面的代码理解。
欢迎交流~
更多推荐
已为社区贡献2条内容
所有评论(0)