我有一个带有 DateTime 索引的 Pandas 数据框。它具有以 1 分钟间隔采样的一些股票的收盘价。我想重新采样这个数据帧并以 5 分钟的间隔获取它,就好像它是以这种方式收集的一样。例如:
SPY AAPL
DateTime
2014-01-02 09:30:00 183.91 555.890
2014-01-02 09:31:00 183.89 556.060
2014-01-02 09:32:00 183.90 556.180
2014-01-02 09:33:00 184.00 556.550
2014-01-02 09:34:00 183.98 556.325
2014-01-02 09:35:00 183.89 554.620
2014-01-02 09:36:00 183.83 554.210
我需要得到类似的东西
SPY AAPL
DateTime
2014-01-02 09:30:00 183.91 555.890
2014-01-02 09:35:00 183.89 554.620
自然的方法是使用 Pandasresample()
或asfreq()
使用 Pandas。他们确实生产了我需要的东西,但是也有一些不受欢迎的输出。我的样本从给定工作日的下午 4 点到次日上午 9:30 没有观察到,因为在这些时间段内交易暂停。这些提到的方法最终会在实际上没有数据可重采样的这些时期内用 NaN 完成数据帧。我可以使用任何选项来避免这种行为吗?从下午 4:05 到第二天早上 9:25,我得到了很多 NaN,仅此而已!
我快速而肮脏的解决方案如下:
Prices_5min = Prices[np.remainder(Prices.index.minute, 5) == 0]
尽管我相信这是一个快速而优雅的解决方案,但我会假设它resample()
有一些选项可以执行此任务。有任何想法吗?非常感谢!
编辑:在关于不需要的输出的评论之后,我添加了以下代码来展示问题:
New_Prices = Prices.asfreq('5min')
New_Prices.loc['2014-01-02 15:50:00':'2014-01-03 9:05:00']
Out:
SPY AAPL
DateTime
2014-01-02 15:50:00 183.12 552.83
2014-01-02 15:55:00 183.08 552.89
2014-01-02 16:00:00 182.92 553.18
2014-01-02 16:05:00 NaN NaN
2014-01-02 16:10:00 NaN NaN
... ... ...
2014-01-03 08:45:00 NaN NaN
2014-01-03 08:50:00 NaN NaN
2014-01-03 08:55:00 NaN NaN
2014-01-03 09:00:00 NaN NaN
2014-01-03 09:05:00 NaN NaN
所有这些 NaN 都应该是最终结果的一部分。他们在那里只是因为没有交易时间。我想避免这种情况。