Pandas类假期不管理闰年>值错误

2024-09-28 22:01:21 发布

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

此代码返回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())

您如何使此代码在非闰年工作? 我以为假期会处理好的,是吗

Thx有很多预付款

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),
         ...]

因为我每年2月都在度假,我会用以下方式制定规则:

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

Tags: 代码importyearstartrulesholidaydaymonth
1条回答
网友
1楼 · 发布于 2024-09-28 22:01:21

定义你自己的遵守

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)

相关问题 更多 >