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

Pandas isin结合holidays.country_holidays首次调用全返回False的问题求助

问题原因

holidays.country_holidays()返回的是惰性加载对象,首次调用isin()时,该对象还未实际生成节假日日期数据,导致全部匹配失败;而用in逐个判断或第二次调用isin()时,会触发对象内部的数据加载逻辑,因此能得到正确结果。

可靠高效的解决方案

直接将节假日对象转换为日期集合(集合的查找效率远高于惰性对象),提前加载所有节假日数据,就能避免上述异常:

import pandas as pd
import holidays

X = pd.DataFrame({'timestampUtc': pd.date_range("2000-12-25", "2001-01-06", freq="1440min", tz="utc")})
X['local_date'] = X['timestampUtc'].dt.tz_convert(tz='Europe/Berlin').dt.date
x_daily = X[['local_date']].drop_duplicates()

# 转换为日期集合,一次性加载所有节假日数据
de_holidays = set(holidays.country_holidays(country='DE', state='BW'))

# 直接添加标识节假日的布尔列,一次调用即可得到正确结果
x_daily['is_holiday'] = x_daily['local_date'].isin(de_holidays)
额外优化方案

如果需要同时获取节假日名称,可以将节假日对象转为字典,通过map实现匹配:

de_holidays_dict = dict(holidays.country_holidays(country='DE', state='BW'))
# 添加布尔列
x_daily['is_holiday'] = x_daily['local_date'].isin(de_holidays_dict.keys())
# 添加节假日名称列,非节假日填充指定内容
x_daily['holiday_name'] = x_daily['local_date'].map(de_holidays_dict).fillna('非节假日')

内容的提问来源于stack exchange,提问作者skeletor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:46:05