pandas.DataFrame.fillna

转载:https://www.cnblogs.com/sunbigdata/p/7895295.html

DataFrame.fillna(value=Nonemethod=Noneaxis=Noneinplace=Falselimit=Nonedowncast=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

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

pad/ffill:用前一个非缺失值去填充该缺失值

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


猜你喜欢

转载自blog.csdn.net/m0_37870649/article/details/80559131