pandas bdate_range的holidays参数允许日期格式及生效问题咨询
问题原因与解决方案
为什么"20240702"没被排除?
当使用freq="C"(自定义工作日频率)时,bdate_range生成的日期是pandas.Timestamp类型。传入的"20240702"是纯数字字符串,pandas不会自动将其解析为Timestamp,导致假期匹配时无法和序列中的日期对应,所以7月2日没有被排除。而"2024-07-02"是ISO标准日期格式,会被自动识别并解析为对应的Timestamp,能成功匹配并排除目标日期。
holidays参数支持的日期格式
以下几种格式都可以正常生效:
- 标准ISO格式字符串:比如
"2024-07-02"、"2024/07/02",这类格式会被pandas自动解析为正确的日期对象 - 预解析的日期对象:直接传入
datetime.date实例或pandas.Timestamp实例,比如datetime.date(2024,7,2)、pd.Timestamp("20240702") - 提前统一解析的字符串列表:用
pd.to_datetime()把所有假期字符串转成Timestamp列表,比如holidays=pd.to_datetime(["20240702", "20240704"]),这样不管字符串格式是纯数字还是其他可解析格式,都能正常匹配
验证示例
如果想保留"20240702"这种格式,只需提前解析:
import pandas as pd # 提前解析假期字符串 holidays = pd.to_datetime(["20240702"]) result = pd.bdate_range(start='20240701', end='20240705', holidays=holidays, freq="C") print(result) # 输出:DatetimeIndex(['2024-07-01', '2024-07-03', '2024-07-04', '2024-07-05'], dtype='datetime64[ns]', freq='C')
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

