Pandas的`period_range`给出了奇怪的结果

6
我希望能得到一个偏移量为25小时的pandas时间段范围,我看到有两种方法可以实现这个需求(见这里):
第一种方法是使用freq=25H,我尝试了一下,得到了正确的答案:
import pandas as pd
pd.period_range(start='2016-01-01 10:00', freq = '25H', periods = 10)

结果是

PeriodIndex(['2016-01-01 10:00', '2016-01-02 11:00', '2016-01-03 12:00',
             '2016-01-04 13:00', '2016-01-05 14:00', '2016-01-06 15:00',
             '2016-01-07 16:00', '2016-01-08 17:00', '2016-01-09 18:00',
             '2016-01-10 19:00'],
            dtype='int64', freq='25H')   

第二种方式使用 freq=1D1H,但是结果却很奇怪:
pd.period_range(start='2016-01-01 10:00', freq = '1D1H', periods = 10)

我已经得到了

 PeriodIndex(['1971-12-02 01:00', '1971-12-02 02:00', '1971-12-02 03:00',
              '1971-12-02 04:00', '1971-12-02 05:00', '1971-12-02 06:00',
              '1971-12-02 07:00', '1971-12-02 08:00', '1971-12-02 09:00',
              '1971-12-02 10:00'],
            dtype='int64', freq='25H')

所以,也许1D1H不是一种有效的指定频率的方式?那么1971是怎么来的呢?(我也尝试将1D1H用作date_range()方法的频率,这确实得到了正确的答案。)

pd.date_range('2016-01-01 10:00', freq = '1D1H', periods = 10)
DatetimeIndex(['2016-01-01 10:00:00', '2016-01-02 11:00:00',
               '2016-01-03 12:00:00', '2016-01-04 13:00:00',
               '2016-01-05 14:00:00', '2016-01-06 15:00:00',
               '2016-01-07 16:00:00', '2016-01-08 17:00:00',
               '2016-01-09 18:00:00', '2016-01-10 19:00:00'],
              dtype='datetime64[ns]', freq='25H')

编辑:看起来使用period_range()函数时,虽然freq=1D1H不能生效,但freq=1H1D可以。原因仍未知。

编辑2:这已被确认为一个bug,请参见下面的答案。


2
输出结果似乎对于输入存在漏洞,不过你在哪里看到这个输入是合法的呢?我从来没有见过像这样的双项频率规范。 - Ami Tavory
这是来自于2016年scipy的pandas时间序列教程,笔记本在这里。如果你搜索1d1h,你可以找到确切的位置。 - Olivier Ma
好的,已将其添加到问题中。一般来说,您可能希望链接到您基于的来源。 - Ami Tavory
“Combining Aliases”似乎是一件事情! - Mahdi
pd.period_range('2016-01-01 10:10', freq = '1H1D', periods = 10) 运行正常! - Mahdi
哈!这更有趣了。所以1H1D没问题,但是1D1H不行,有什么解释吗? - Olivier Ma
1个回答

5

这个 bug 已经被发现并在 GitHub 上 报告 了。

编辑:修复程序 已经合并,将包含在 v0.19 版本中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接