Pandas在数据帧中向后插入()

时间:2016-11-14 05:56:13

标签: python pandas dataframe

展望未来,interpolate效果很好:

       name    days
0      a       NaN
1      a       NaN
2      a         2
3      a         3
4      a       NaN 
5      a       NaN  

records.loc[:, 'days'].interpolate(method='linear', inplace=True)

       name    days
0      a       NaN
1      a       NaN
2      a         2
3      a         3
4      a         4 
5      a         5  

...但是,它没有解决起始行(仅前进)。 limit_direction参数允许{‘forward’, ‘backward’, ‘both’}。这些都不起作用。有向后插值的正确方法吗?

我们可以假设一系列递增或递减1,这可能不会从0开始,因为在这个例子中恰好。

1 个答案:

答案 0 :(得分:1)

它似乎仅适用于参数limit,请参阅docs [In 47]

  

添加 limit_direction 关键字参数,该参数与限制一起使用,以启用插值以向前,向后或同时填充NaN值(GH9218,GH10420,GH11115)

records = pd.DataFrame(
{'name': {0: 'a', 1: 'a', 2: 'a', 3: 'a', 4: 'a', 5: 'a', 6: 'a', 7: 'a', 8: 'a', 9: 'a'}, 
'days': {0: 0.0, 1: np.nan, 2: np.nan, 3: np.nan, 4: 4.0, 5: 5.0, 6: np.nan, 7: np.nan, 8: np.nan, 9: 9.0}}, 
columns=['name','days'])

print (records)
  name  days
0    a   0.0
1    a   NaN
2    a   NaN
3    a   NaN
4    a   4.0
5    a   5.0
6    a   NaN
7    a   NaN
8    a   NaN
9    a   9.0
    
#by default limit_direction='forward'
records['forw'] = records['days'].interpolate(method='linear', 
                                              limit=1)
records['backw'] = records['days'].interpolate(method='linear',
                                               limit_direction='backward', 
                                               limit=1)
records['both'] = records['days'].interpolate(method='linear', 
                                              limit_direction='both', 
                                              limit=1)
print (records)
  name  days  forw  backw  both
0    a   0.0   0.0    0.0   0.0
1    a   NaN   1.0    NaN   1.0
2    a   NaN   NaN    NaN   NaN
3    a   NaN   NaN    3.0   3.0
4    a   4.0   4.0    4.0   4.0
5    a   5.0   5.0    5.0   5.0
6    a   NaN   6.0    NaN   6.0
7    a   NaN   NaN    NaN   NaN
8    a   NaN   NaN    8.0   8.0
9    a   9.0   9.0    9.0   9.0