我在数据框中有一些我正在重新采样的股票数据,这导致一些NaN值。这是原始饲料的一部分:
In [34]: feeddf
Out[34]:
open high low close volume
date
2017-12-03 07:00:00 14.46 14.46 14.46 14.46 25000
2017-12-03 07:01:00 14.46 14.46 14.46 14.46 20917
2017-12-03 07:06:00 14.50 14.50 14.50 14.50 2000
2017-12-03 07:12:00 14.50 14.56 14.50 14.56 17000
Feed应该是每分钟,但是当没有可用数据时,会跳过该行。重新采样数据帧并聚合打开,高,低和关闭时,它看起来像这样:
In [35]: feeddf.resample('3Min').agg({'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last'})
Out[35]:
open high low close
date
2017-12-03 07:00:00 14.46 14.46 14.46 14.46
2017-12-03 07:03:00 NaN NaN NaN NaN
2017-12-03 07:06:00 14.50 14.50 14.50 14.50
2017-12-03 07:09:00 NaN NaN NaN NaN
2017-12-03 07:12:00 14.50 14.56 14.50 14.56
我的问题:我想根据最后一行的close
值向前填充缺失的数据。 df.fillna(method='ffill')
没有帮助,因为它根据同一列的最后一个值填充它。有什么想法吗?
答案 0 :(得分:3)
首先向前填充最后一列close
,然后按列添加bfill
:
print (df)
open high low close
date
2017-12-03 07:00:00 14.46 14.46 14.46 14.81
2017-12-03 07:03:00 NaN NaN NaN NaN
2017-12-03 07:06:00 14.50 14.50 14.50 14.59
2017-12-03 07:09:00 NaN NaN NaN NaN
2017-12-03 07:12:00 14.50 14.56 14.50 14.56
df['close'] = df['close'].ffill()
df = df.bfill(axis=1)
print (df)
open high low close
date
2017-12-03 07:00:00 14.46 14.46 14.46 14.81
2017-12-03 07:03:00 14.81 14.81 14.81 14.81
2017-12-03 07:06:00 14.50 14.50 14.50 14.59
2017-12-03 07:09:00 14.59 14.59 14.59 14.59
2017-12-03 07:12:00 14.50 14.56 14.50 14.56