为什么pandas的date_range会向上舍入到下一个月?

ffx8fchx  于 2023-06-04  发布在  其他
关注(0)|答案(2)|浏览(248)

pandas.date_range与开始日期、频率和期间一起使用时,如果将开始日期用作一个月的最后一天,则日期范围将向上舍入。
这似乎是一个无声的边缘情况错误。如果不是窃听器,知道为什么吗?
比如说,

import pandas as pd

start_date = pd.Timestamp(2023, 5, 31)
date_range = pd.date_range(start=start_date, freq="MS", periods=6)

导致

DatetimeIndex(['2023-06-01', '2023-07-01', '2023-08-01', '2023-09-01',
               '2023-10-01', '2023-11-01'],
              dtype='datetime64[ns]', freq='MS')

从文档中,我预计它将在5月开始,10月结束:

DatetimeIndex(['2023-05-01', '2023-06-01', '2023-07-01', '2023-08-01', '2023-09-01',
               '2023-10-01'],
              dtype='datetime64[ns]', freq='MS')

我认为这与inclusive参数有关,但这也不是原因。

2jcobegt

2jcobegt1#

pd.date_range用于生成startend之间的日期范围。如果2023-05-01小于开始日期2023-05-31,则它将永远不会到达该日期。要做你想做的事情,你可以用1替换pd.Timestamp的day。

start_date = pd.Timestamp(2023, 5, 31)
date_range = pd.date_range(start=start_date.replace(day=1), freq="MS", periods=6)
print(date_range)

DatetimeIndex(['2023-05-01', '2023-06-01', '2023-07-01', '2023-08-01',
               '2023-09-01', '2023-10-01'],
              dtype='datetime64[ns]', freq='MS')
oipij1gg

oipij1gg2#

documentation读取

  • “使得它们都满足start <[=] x <[=] end”*

因此,由于提供的日期是pd.Timestamp(2023, 5, 31),因此满足start <= x的第一个"MS"(月初)日期是下一个月。

相关问题