python - Pandas 的班级假期不管理闰年 -> ValueError
问题描述
此代码返回ValueError: day is out of range for month
:
from pandas.tseries.holiday import Holiday, AbstractHolidayCalendar
from pandas.tseries.offsets import MonthEnd
import datetime as dt
class MyHolidays(AbstractHolidayCalendar):
rules = [Holiday('Sapeur',month=2,day=29)]
cal=MyHolidays()
if __name__ == '__main__':
start = dt.date(2020, 2, 1)
myholidays =cal.holidays(start, start + MonthEnd())
你如何让这段代码在非闰年工作?我以为Holiday班级处理了那个,不是吗?
非常感谢提前。
ps: 2020 年是闰年,但不是 2019 年或 2021 年。ps2: 我寻求比以下更好的解决方案:
rules = [Holiday('Sapeur',year=2020, month=2,day=29),
Holiday('NoSapeur',year=2021, month=2,day=28),
Holiday('NoSapeur',year=2022, month=2,day=28),
Holiday('NoSapeur',year=2023, month=2,day=28),
Holiday('Sapeur',year=2024, month=2,day=29),
Holiday('NoSapeur',year=2025, month=2,day=28),
Holiday('NoSapeur',year=2026, month=2,day=28),
Holiday('NoSapeur',year=2027, month=2,day=28),
Holiday('Sapeur',year=2028, month=2,day=29),
...]
因为我每年二月都在度假,所以我制定了以下规则:
cejour=pd.Timestamp.today()
RÈGLES=[]
mois=2
for jour in pd.date_range(début_mois:=cejour.replace(month=mois, day=1), début_mois+MonthEnd(), normalize=True):
RÈGLES+=[Holiday('Vacances Février',month=mois, day=jour.day)]
class MyHolidays(AbstractHolidayCalendar):
rules = RÈGLES
解决方案
定义自己的遵守
def leap_year(dt):
if dt.is_leap_year:
return dt + MonthEnd()
class MyHolidays(AbstractHolidayCalendar):
rules = [Holiday('Sapeur', month=2, day=28, observance=leap_year)]
cal = MyHolidays()
start = dt.date(2020, 2, 1)
myholidays =cal.holidays(start, start + MonthEnd())
print(myholidays) # DatetimeIndex(['2020-02-29'], dtype='datetime64[ns]', freq=None)
如果你在非闰年尝试这个,那么它不会分配任何东西
start = dt.date(2019, 2, 1)
myholidays =cal.holidays(start, start + MonthEnd())
print(myholidays) # DatetimeIndex([], dtype='datetime64[ns]', freq=None)
推荐阅读
- tensorflow - Tensorflow Lite 让我对任何图像的准确率都为 0%
- android - 如何通过 JNI 从 Kotlin 获取文件描述符到 C++
- c - 如何进行基于优先级的处理
- python - 错误标准错误:
: 在存储库之外 - .net - 如果我不能重用它,在干净架构的基础设施层中添加 EmailSender 的目的是什么?
- javascript - 如何在Node中逐行编写新的csv文件?
- forth - Forth 中的 RDROP 是什么?
- java - 功能停止保存 forge 1.12.2
- azure - Azure Blob 存储生命周期管理 - 嵌入式文件夹
- android - 语言有时会在我的 Android 应用程序中更改为语言系统