转载:https://www.cnblogs.com/sunbigdata/p/7895295.html
DataFrame.
fillna
(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
功能:使用指定的方法填充NA / NaN值
参数:value : 变量, 字典, Series, or DataFrame
用于填充缺失值(例如0),或者指定为每个索引(对于Series)或列(对于DataFrame)使用哪个字典/Serise/DataFrame的值。(不在字典/Series/DataFrame中的值不会被填充。)这个值不能是一个列表。
method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认值 None 在Series中使用方法填充空白(向前填充,向后填充)
axis : {0 or ‘index’, 1 or ‘columns’}
inplace : boolean, 默认值 False 如果为Ture,在原地填满。注意:这将修改次对象上的任何其他视图(例如,DataFrame中的列的无复制贴片)
limit : int, 默认值 None
如果指定了方法,则这是连续的NaN值的前向/后向填充的最大数量。 换句话说,如果连续NaN数量超过这个数字,它将只被部分填充。 如果未指定方法,则这是沿着整个轴的最大数量,其中NaN将被填充。 如果不是无,则必须大于0。
downcast : dict, 默认是 None
如果可能的话,把 item->dtype 的字典将尝试向下转换为适当的相等类型的字符串(例如,如果可能的话,从float64到int64)
返回:被充满的DataFrame
-----------------------------------------------------------------------------------------------------------------------------------
根据官方文档,我们知道fillna有一下几种method:‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None;
那么每一种method都是起什么样的作用呢?
method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None
pad/ffill:用前一个非缺失值去填充该缺失值Method to use for filling holes in reindexed Series pad / ffill: propagate last valid observation forward to next valid backfill / bfill: use NEXT valid observation to fill gap
backfill/bfill:用下一个非缺失值填充该缺失值
None:指定一个值去替换缺失值
------------------------------------------------------------------------------------------------------------------------------------
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
>>>df
=
pd.DataFrame([[np.nan,
2
,np.nan,
0
],
[
3
,
4
,np.nan,
1
],
[np.nan,np.nan,np.nan,
5
],
[np.nan,
3
,np.nan,
4
]],
columns
=
list
(
'ABCD'
))
>>> df
A B C D
0
NaN
2.0
NaN
0
1
3.0
4.0
NaN
1
2
NaN NaN NaN
5
3
NaN
3.0
NaN
4
#将NAN值转换为0
>>>df.fillna(
0
)
A B C D
0
0.0
2.0
0.0
0
1
3.0
4.0
0.0
1
2
0.0
0.0
0.0
5
3
0.0
3.0
0.0
4
#向前或向后传播
>>>df.fillna(method
=
'ffill'
)
A B C D
0
NaN
2.0
NaN
0
1
3.0
4.0
NaN
1
2
3.0
4.0
NaN
5
3
3.0
3.0
NaN
4
#用字典替换
>>>values
=
{
'A'
:
0
,
'B'
:
1
,
'C'
:
2
,
'D'
:
3
}
>>> df.fillna(value
=
values)
A B C D
0
0.0
2.0
2.0
0
1
3.0
4.0
2.0
1
2
0.0
1.0
2.0
5
3
0.0
3.0
2.0
4
#只替换第一个NAN值
>>> df.fillna(value
=
values, limit
=
1
)
A B C D
0
0.0
2.0
2.0
0
1
3.0
4.0
NaN
1
2
NaN
1.0
NaN
5
3
NaN
3.0
NaN
4
|