【发布时间】:2016-06-19 14:59:42
【问题描述】:
我有 5 年的标准普尔 500 指数数据,我正试图将这些数据分组到特定的时间块中以进行一些分析。我的数据以 5 分钟为增量。在将它读入一个名为 dated 的 DataFrame 后,我想我可以按每个交易日 Globex 开盘和收盘之间的时间增量将其分组为包含连续行的块。 Globex 开盘时间为太平洋标准时间下午 3:00 (15:00),收盘时间为太平洋标准时间下午 1:15 (13:15),即 22.25 小时后。所以我想把从下午 3:00 打开到下午 1:15 的数据分块——每个块大约有 275 行。
困难在于“交易日”跨越 2 个不同的日期,例如,一个交易日在 2016 年 3 月 6 日星期日 15:00 开始,并在 3 日星期一结束-7-2016 在 13:15。我无法按“日期”列进行分组,因为当我需要数据块跨越两个日期时,所有 3-6 都将在一个块中,3-7 在另一个块中,为了将整个 Globex 日分成一大块。
对于 Pandas 和 Python 来说,我都比较陌生,我不知道使用什么方法将数据分组到我想要的块中。数据分离后,我想将每个时段/块的最高价和最低价提取到单独的列中,另外还有一列仅代表 15:05 的开盘价。
这是我的数据的示例:
Date Time Open High Low Close Up Down
0 2015-08-03 15:05 2073.50 2074.00 2073.25 2073.25 210 563
1 2015-08-03 15:10 2073.25 2073.25 2072.25 2072.75 118 632
2 2015-08-03 15:15 2072.75 2072.75 2072.25 2072.50 132 85
3 2015-08-03 15:20 2072.50 2072.75 2072.25 2072.50 95 312
4 2015-08-03 15:25 2072.50 2074.00 2072.50 2073.50 372 264
最初,“日期”列值如下所示:2015 年 8 月 3 日。我认为它可能不会被读取为实际的日期对象,因此我使用 to_datetime() 更改了值,以使“日期”列值读取为像上面的示例 DataFrame 中看到的实际日期对象一样。
dated['Date'] =pd.to_datetime(dated['Date'])
当我尝试使用 to_datetime() 更改“时间”列中的值时,它成功地将时间从 15:05 更改为 15:05:00,但它也添加了日期,所以它看起来像这样: '2016-03-05 15:05:00',问题在于它使用今天的日期作为日期。这显然对我不起作用,因为我的数据是历史数据,并且日期和时间是对历史价格的参考。
我试图将“时间”列更改为日期时间对象的原因是我认为我可以在 groupby 操作期间将其切成我需要的块:
dated = dated['Date'].groupby(dated['15:05' : '13:20'])
这产生了错误:
IndexError: invalid slice
因此,如果能帮助我解决这个问题,我将不胜感激 - 为我指明正确的研究领域。我基本上一直在逐篇阅读 pandas 文档,尝试不同的方法,但由于我不确定从什么步骤开始,所以我一直在随机选择要阅读的主题,但没有找到答案。
谢谢, 安娜
【问题讨论】: