奇怪的熊猫date_range行为

时间:2020-08-26 15:13:46

标签: python pandas

当开始日期和结束日期之间的时间不匹配并且频率设置为“ <月>月”时,熊猫date_range()函数显示出奇怪的行为。

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 21:00:00", freq="1M")

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00'], dtype='datetime64[ns]', freq='M')

在此示例中,我希望索引中出现“ 2020-07-31 22:00:00”,但事实并非如此。

尽管如此,以下示例仍然可以正常工作:

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 22:00:00", freq="1M")

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00',
               '2020-07-31 22:00:00'],
              dtype='datetime64[ns]', freq='M')

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 23:00:00", freq="1M")

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00',
               '2020-07-31 22:00:00'],
              dtype='datetime64[ns]', freq='M')

如果提供Datetime对象而不是字符串,也会发生这种情况:

>>> s = pd.to_datetime("2020-05-31 22:00:00", format="%Y-%m-%d %H:%M:%S")
>>> e = pd.to_datetime("2020-08-29 21:00:00", format="%Y-%m-%d %H:%M:%S")

>>> pd.date_range(s, e, freq="1M")
DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00'], dtype='datetime64[ns]', freq='M')

这是一个错误还是我缺少什么?

Pandas v1.1.0

1 个答案:

答案 0 :(得分:1)

我发现使用的时间少于开始日期中提到的时间将不会列出最后一个结果,或者您可以使用的时间大于开始日期中的时间

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 23:00:00", freq="1M")

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00',
               '2020-07-31 22:00:00'],
              dtype='datetime64[ns]', freq='M')

OR

可以使用pandas DateOffset函数代替“ 1M”作为频率值,这将帮助您获得所需的结果。

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 21:00:00", freq=pd.DateOffset(months=1))

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00',
               '2020-07-30 22:00:00'],
              dtype='datetime64[ns]', freq='<DateOffset: months=1>')