You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Pandas USFederalHolidayCalendar中移除指定节假日并解决循环报错

错误原因
  • USFederalHolidayCalendar的rules是类级别的可变属性,所有实例共享同一份列表。你直接对实例的rules执行pop,本质是修改了全局共享的类属性,第一次执行后索引6的元素就被永久移除了,后续再调用pop(6)自然会触发索引越界。
  • importlib.reload失效是因为Python的模块重载不会重置已经被修改的类可变属性,内存中已有的类对象修改会被保留。
解决方法

方法1:复制原规则生成独立自定义日历(推荐,无副作用)

不要直接修改原日历的规则,每次需要用到移除哥伦布日的日历时,先深拷贝一份原规则列表,删除对应项后再构造新的日历实例,完全不会影响原类的属性:

from copy import deepcopy
from pandas.tseries.holiday import USFederalHolidayCalendar, HolidayCalendar

def get_no_columbus_calendar():
    # 深拷贝原规则,避免修改原类属性
    custom_rules = deepcopy(USFederalHolidayCalendar.rules)
    # 移除哥伦布日(对应原规则索引6)
    custom_rules.pop(6)
    # 返回独立的自定义日历实例
    return HolidayCalendar(rules=custom_rules)

循环中每次调用该函数都会生成独立的日历对象,互相之间没有影响,不会出现越界问题。

方法2:全局单次修改类属性

如果你的整个程序所有场景下都不需要哥伦布日,可以在程序初始化阶段仅修改一次类属性,后续所有实例都会生效,不需要循环重复操作:

from pandas.tseries.holiday import USFederalHolidayCalendar

# 程序启动时仅执行一次
if len(USFederalHolidayCalendar.rules) > 6:
    USFederalHolidayCalendar.rules.pop(6)

后续所有USFederalHolidayCalendar()实例化得到的日历都已经移除了哥伦布日,循环调用不会报错。

内容的提问来源于stack exchange,提问作者pepe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:57:02