使用chinesecalendar的is_holiday处理DataFrame日期列时触发类型错误
问题分析与解决方案
错误原因
datetime.date() 仅接受单个整数作为年、月、日参数,但你传入的是 Pandas Series 对象(整列的年、月、日数据),它无法将整个 Series 转换为单个整数,因此触发 TypeError。
解决方案
前提准备
首先确保你的「记账日期」列是 datetime 类型(如果不是,先转换):
import pandas as pd from chinese_calendar import is_holiday # 转换为 datetime 类型(如果原列不是的话) init_time_data["记账日期"] = pd.to_datetime(init_time_data["记账日期"])
方法1:使用 apply 逐行处理(直观易读)
直接对「记账日期」列的每个元素提取 date 对象,再传入 is_holiday:
init_time_data["is_holiday"] = init_time_data["记账日期"].apply(lambda dt: is_holiday(dt.date()))
方法2:向量化处理(适合大数据量,效率更高)
用 numpy.vectorize 将 is_holiday 转换为支持批量处理的函数,直接传入整列的 date 对象:
from numpy import vectorize # 向量化is_holiday函数 vectorized_is_holiday = vectorize(is_holiday) # 批量处理整列日期 init_time_data["is_holiday"] = vectorized_is_holiday(init_time_data["记账日期"].dt.date)
代码说明
dt.date()会将 Pandas 的 datetime64 类型元素转换为标准的datetime.date对象,符合is_holiday的参数要求。- 两种方法最终都会生成布尔值列(
True表示节假日,False表示工作日)。
内容的提问来源于stack exchange,提问作者Jaycee
相关产品推荐
相关产品推荐

