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