我有一个数据框,每5分钟保存一次交易数据,例如
open close
datetime
2015-02-02 08:00:00 43.5 NaN
2015-02-02 08:10:00 43.3 0
2015-02-02 08:15:00 43.2 7
2015-02-02 08:20:00 NaN NaN
2015-02-02 08:25:00 43.1 9
2015-02-02 08:35:00 43.0 9
2015-02-02 08:40:00 43.0 11
2015-02-02 08:45:00 NaN NaN
2015-02-02 08:50:00 NaN NaN
2015-02-02 08:55:00 NaN NaN
2015-02-02 09:00:00 43.1 9
,我希望仅在np.nan
处填充缺少的行,如08:30:00时间戳,然后向前填充。我已经研究过使用pd.date_range
函数来计算从开始到结束日期每隔五分钟的索引,只是天真地将其分配为数据框的索引,但是正如我所认为的那样,这会引发错误。
我还查看了this的问题,该问题与我要问的问题非常相似,但答案使用的是resample
。我不知道如何解决OP的问题,因为据我所知,您不能像对待数据框一样对待重采样对象并以相同的方式查询它。
编辑:
我最终找到了完成此任务的方法。我使用date_range
制作了一个具有与整个日期范围相同的列的数据框,然后使用update
答案 0 :(得分:0)
要从重采样对象中获取某些东西,您需要添加一种调度方法(请参见the docs),例如:
import numpy as np
import pandas as pd
df = pd.DataFrame({'open': [43.5,43.3,43.2,np.NaN,43.1,43.0,43.0,np.NaN,np.NaN,np.NaN,43.1],
'close': [np.NaN,0,7,np.NaN,9,9,11,np.NaN,np.NaN,np.NaN,9]},
index = pd.to_datetime(['2015-02-02 08:00:00','2015-02-02 08:10:00','2015-02-02 08:15:00',
'2015-02-02 08:20:00','2015-02-02 08:25:00','2015-02-02 08:35:00',
'2015-02-02 08:40:00','2015-02-02 08:45:00','2015-02-02 08:50:00',
'2015-02-02 08:55:00','2015-02-02 09:00:00']))
df1 = df.resample('5min').mean()
# df1
# open close
# 2015-02-02 08:00:00 43.5 NaN
# 2015-02-02 08:05:00 NaN NaN
# 2015-02-02 08:10:00 43.3 0.0
# 2015-02-02 08:15:00 43.2 7.0
# 2015-02-02 08:20:00 NaN NaN
# 2015-02-02 08:25:00 43.1 9.0
# 2015-02-02 08:30:00 NaN NaN
# 2015-02-02 08:35:00 43.0 9.0
# 2015-02-02 08:40:00 43.0 11.0
# 2015-02-02 08:45:00 NaN NaN
# 2015-02-02 08:50:00 NaN NaN
# 2015-02-02 08:55:00 NaN NaN
# 2015-02-02 09:00:00 43.1 9.0