Pandas的日期范围包括月结转、周任务和假期列表

2024-06-07 09:46:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在寻找类似的问题,但我无法找到我的问题的答案。我尝试生成熊猫的日期范围,每月或每季度滚动一周和一个假期列表。到目前为止,我设法使一个范围,但每天的频率。我有没有办法让这个日期每月或每季度(而不是每天)滚动

import pandas as pd
import numpy as np
weekmask_pd = 'Mon Tue Wed Thu Fri'
holidays_pd = ['2019-11-15', '2019-12-13']
bday_pd = pd.offsets.CustomBusinessDay(holidays=holidays_pd, weekmask=weekmask_pd)
start_date = pd.Timestamp('2019-11-13')
end_date = pd.Timestamp('2020-11-13')
dts = pd.bdate_range(start_date, end_date, freq=(bday_pd))

以下代码的结果如下所示:

DatetimeIndex(['2019-11-13', '2019-11-14', '2019-11-18', '2019-11-19',
               '2019-11-20', '2019-11-21', '2019-11-22', '2019-11-25',
               '2019-11-26', '2019-11-27',
               ...
               '2020-11-02', '2020-11-03', '2020-11-04', '2020-11-05',
               '2020-11-06', '2020-11-09', '2020-11-10', '2020-11-11',
               '2020-11-12', '2020-11-13'],
              dtype='datetime64[ns]', length=261, freq='C')

我希望收到的是:

DatetimeIndex(['2019-11-13', '2019-12-16', '2020-01-13', '2020-02-13',
               '2020-03-13', '2020-04-13', '2020-05-13', '2020-06-15',
               '2020-07-13', '2020-08-13',
               ...

需要帮忙吗


Tags: 答案import列表dateasholidaysstarttimestamp
1条回答
网友
1楼 · 发布于 2024-06-07 09:46:41

我想我找到了@MaxU在Pandas date_range for six-monthly values提供的一个很好的解决方案 但是,它的行为并不符合预期,因为它跳过了1)和2)解决方案中的开始日期,而在3)解决方案中返回错误

(一)

dts2 = pd.bdate_range(start_date, end_date, freq='CBMS', weekmask=weekmask_pd, 
      holidays=holidays_pd) + pd.offsets.Day(start_date.day-1)

(二)

dts3 = pd.bdate_range(start_date, end_date, freq='CBMS', weekmask=weekmask_pd,
      holidays=holidays_pd)+ datetime.timedelta(days=start_date.day-1)

1)和2)返回相同的日期范围:

DatetimeIndex(['2019-12-14', '2020-01-13', '2020-02-15', '2020-03-14',
               '2020-04-13', '2020-05-13', '2020-06-13', '2020-07-13',
               '2020-08-15', '2020-09-13', '2020-10-13', '2020-11-14'],
              dtype='datetime64[ns]', freq=None)

(三)

dts3 = pd.bdate_range(start_date, end_date, freq='CBMS-{}'.format(start_date.day), weekmask=weekmask_pd, holidays=holidays_pd)

返回:

ValueError: invalid custom frequency string: CBMS-13

如果您对如何使该日期范围包括开始日期以及如何每季度、每半年或每年进行一次展期有任何意见或提示,我将不胜感激,因为我看不到任何自定义频率字符串

相关问题 更多 >

    热门问题