具有月频率的日期范围

w3nuxt5m  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(189)

我想根据任意两个日期生成日期范围。例如:

start_date = "2021-01-15"
end_date = "2021-04-15"
pd.date_range(start_date, end_date, freq="M")

这导致 DatetimeIndex(['2021-01-31', '2021-02-28', '2021-03-31'], dtype='datetime64[ns]', freq='M') .
我想更新这个,以获得所有月份,包括在 start_dateend_date . 因此,我想得到这样的东西 DatetimeIndex(['2021-01-31', '2021-02-28', '2021-03-31', '2021-04-30'], dtype='datetime64[ns]', freq='M') (注 '2021-04-30' 因为四月在美国 end_date ).
我知道还有其他频率选择(例如这里),我可以试试 freq="MS" (月开始)包括最后一个月(4月),但第一个月(1月)将丢失。
我明白 pd.date_range 总是关心几天,这是有道理的,但因为这在我的情况下并不重要(我不关心几天,只关心几个月,不管输出是否会像这样) 2021-01-012021-01-31 甚至,例如。 2021-01-11 ),我想知道是否有任何简单的解决方案可以奏效?

tvz2xvvm

tvz2xvvm1#

使用 period_range 如果仅与月份一起工作:

per = pd.period_range(start_date, end_date, freq="M")
print (per)
PeriodIndex(['2021-01', '2021-02', '2021-03', '2021-04'], dtype='period[M]', freq='M')

对于转换为日期时间,可以使用 PeriodIndex.to_timestamp 具有 DatetimeIndex.normalize :

print (per.to_timestamp(how='end').normalize())
DatetimeIndex(['2021-01-31', '2021-02-28', '2021-03-31', '2021-04-30'],
               dtype='datetime64[ns]', freq='M')

相关问题