我有一个带有日期时间索引的熊猫数据框。它有一些股票的收盘价,采样间隔为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
自然的方法是resample()
或asfreq()
与熊猫一起。他们确实生产了我需要的东西,但是也有一些不想要的输出。我的样本从一个工作日的下午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
所有这些都应该是最终结果的一部分。他们在那里只是因为没有交易时间。我想避免这种情况
只需使用
dropna()
丢弃包含NaN值的行即可使用稍微修改过的输入数据版本进行演示:
直接重采样将为行提供NaN值:
与
dropna()
相关的内容:概述:创建一个区间指数来描述交易时间(营业日从0930到1400)。然后找到交易窗口中的时间戳(从重采样)
…并根据您的示例创建了一个5分钟间隔的列表(一些在交易时间内,其他在交易停止时的时间戳)
然后,我使用区间索引的
.contains()
方法来确定时间戳(来自重采样)是否在交易窗口期间:这将保留交易窗口期间的所有时间戳(无论是否有实际交易)。您还可以在“交易窗口”的创建中包括假期
相关问题 更多 >
编程相关推荐