首页 > 解决方案 > 检查日期是否为假期 [TypeError: an integer is required (got type Holiday)]

问题描述

我用熊猫从 csv 中读取数据。读取数据后,我将日期列从字符串转换为日期格式并删除时间。我想创建一个包含值 0 和 1 的新列,显示一天是假期 (1) 还是不是 (0)。为此,我将时间字符串转换为日期时间并创建了一个假日日历:

import pandas as pd
from pandas.tseries.offsets import Easter, Day
from pandas.tseries.holiday import EasterMonday, GoodFriday, Holiday, AbstractHolidayCalendar

# convert strings to date
data['date'] = pd.to_datetime(data['date'], dayfirst=True, errors='coerce')
# remove time
data['date'] = data['date'].dt.date

# german holidays
class GermanHolidays(AbstractHolidayCalendar):
    rules = [Holiday('New Years Day', month=1, day=1),
             Holiday('Good Fridy', GoodFriday),
             Holiday('Easter Monday', EasterMonday),
             Holiday('Ascension of Christ', month=1, day=1, offset=[Easter(), Day(39)]),
             Holiday('Internation Womens Day', month=3, day=8),
             Holiday('First of May', month=5, day=1),
             Holiday('Whit Monday', month=1, day=1, offset=[Easter(), Day(50)]),
             Holiday('Liberation Day', month=5, day=8),
             Holiday('German Unity Day', month=10,day=3),
             Holiday('First Christmas Day', month=12, day=25),
             Holiday('Second Christmas Day', month=12, day=26)]

cal = GermanHolidays()
holidays = cal.holidays(start = data['date'].min(), end = data['date'].max())

问题发生在最后一行(假期= ...),我收到以下错误:

TypeError: an integer is required (got type Holiday)

我已经看到其他帖子具有相同的代码,但我无法弄清楚,这个错误的原因是什么。

有任何想法吗?谢谢!

标签: pythonpandastime

解决方案


您需要修复这些规则:

rules = [Holiday('New Years Day', month=1, day=1),
         GoodFriday,
         EasterMonday,
         Holiday('Ascension of Christ', month=1, day=1, offset=[Easter(), Day(39)]),
         Holiday('Internation Womens Day', month=3, day=8),
         Holiday('First of May', month=5, day=1),
         Holiday('Whit Monday', month=1, day=1, offset=[Easter(), Day(50)]),
         Holiday('Liberation Day', month=5, day=8),
         Holiday('German Unity Day', month=10,day=3),
         Holiday('First Christmas Day', month=12, day=25),
         Holiday('Second Christmas Day', month=12, day=26)]

推荐阅读