You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:15:10