pandas使用bdate_range指定holidays参数后未排除目标日期如何解决?
问题原因
你传参的位置错误,holidays参数不是pd.bdate_range的直接入参,需要传入给自定义工作日频率对象pd.offsets.CustomBusinessDay才会生效。你之前直接将holidays传递给bdate_range,参数不会被频率识别,因此排除规则不生效。
正确实现代码
import pandas as pd from datetime import date # 定义待排除的日期 exclude = [date(2020, 1, 7), date(2020, 1, 27)] # 构造带排除假期的自定义工作日频率 custom_bd = pd.offsets.CustomBusinessDay(holidays=exclude) # 生成日期范围 result = pd.bdate_range(start='2020/1/1', end='2020/1/31', freq=custom_bd)
结果验证
输出的result会自动排除1月7日和1月27日,符合预期:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06', '2020-01-08', '2020-01-09', '2020-01-10', '2020-01-13', '2020-01-14', '2020-01-15', '2020-01-16', '2020-01-17', '2020-01-20', '2020-01-21', '2020-01-22', '2020-01-23', '2020-01-24', '2020-01-28', '2020-01-29', '2020-01-30', '2020-01-31'], dtype='datetime64[ns]', freq='C')
补充说明
- 高版本pandas已弃用
pd.datetime()接口,推荐直接使用datetime.date或者pd.Timestamp定义日期,兼容性更好。 - 如果需要同时修改工作日规则(比如调整一周的工作日范围),也可以在
CustomBusinessDay构造时传入weekmask参数自定义。
内容的提问来源于stack exchange,提问作者hpet
相关产品推荐
相关产品推荐

