熊猫节假日不管理leap年-> ValueError

时间:2020-04-14 22:27:32

标签: python pandas

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

您如何使此代码在非le年工作? 我以为Holiday班上课了,不是吗?

非常感谢。

ps:2020年是a年,但不是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

1 个答案:

答案 0 :(得分:1)

定义自己的遵守情况

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)

如果您尝试使用非leap年,则不会分配任何内容

start = dt.date(2019, 2, 1)
myholidays =cal.holidays(start, start + MonthEnd())

print(myholidays) # DatetimeIndex([], dtype='datetime64[ns]', freq=None)
相关问题