Pandas的.reindex()中关于填充缺失值的整理fill_value, method (ffill, pad, bfill, backfill)

在学习Pandas时,当对一个Series或者DataFrame进行重新索引时,需要用到pandas.Series.reindex()或者pandas.DataFrame.redinx()。当某个索引值不存在时,会直接引入缺失值NaN。我们可以通过填充的方式,使Series或者DataFrame中新的index拥有新的索引。这篇文章整理下reindex中关于填充缺失值的几个方法

先创建一个object

import pandas as pd
obj = pd.Series(['a', 'b','c'], index=[0,1,4])
obj
#返回结果
Out[1]: 
0    a
1    b
4    c
dtype: object

使用reindex()重新索引

obj.reindex(range(6))
#返回结果
Out[2]: 
0      a
1      b
2    NaN #引入缺失值
3    NaN #引入缺失值
4      c
5    NaN #引入缺失值
dtype: object
#这里可以看出,如果不赋值,新的索引会直接引入缺失值NaN

补充缺失值方法整理:

方法一 通过reindex(fill_value) 直接给NaN赋值

obj
#返回结果
Out[3]: 
0    a
1    b
4    c
dtype: object

obj.reindex(range(6), fill_value=0)
Out[4]: 
0    a
1    b
2    0 #赋值为0
3    0 #赋值为0
4    c
5    0 #赋值为0
dtype: object

方法二 通过reindex(method) 直接给NaN填充赋值

obj
#返回结果
Out[5]: 
0    a
1    b
4    c
dtype: object

obj.reindex(range(6), method='ffill')
obj.reindex(range(6), method='pad')
#上面两种方法,返回结果一致,如下
Out[6]: 
0    a
1    b
2    b #根据前面的值填充
3    b #根据前面的值填充
4    c
5    c #根据前面的值填充
dtype: object

上面的’ffill’/ ‘pad’: 可以理解为forward fill,是根据前面的值填充

obj
#返回结果
Out[7]: 
0    a
1    b
4    c
dtype: object

obj.reindex(range(6), method='bfill')
obj.reindex(range(6), method='backfill')
#上面两种方法,返回结果一致,如下
Out[8]: 
0      a
1      b
2      c #根据后面的值填充
3      c #根据后面的值填充
4      c
5    NaN #根据后面的值填充,这里后面没有值,所以还是NaN
dtype: object

上面的bfill/ backfill: 根据后面的值填充

整理:
reindex中有两个关于填充缺失值的方法:

  1. reindex(fill_value)直接给NaN缺失值赋值
  2. reindex(method)给NaN赋值
    method = ‘ffill’/ ‘pad’: 根据前面的值填充
    method = ‘bfill’/ ‘backfill’: 根据后面的值填充

你可能感兴趣的:(Python,Pandas,python)