You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python循环遍历国家列表调用holidays库获取节假日并存入DataFrame?

解决Python holidays库循环获取多国节假日的问题

嘿,我来帮你搞定这个问题!你遇到的AttributeError是因为Python没法直接把变量i当成holidays模块的属性名来用——毕竟holidays.i是不存在的,你得用动态属性获取的方式来调用对应国家的节假日类。下面给你一步步拆解解决方案:

核心问题分析

holidays库的国家节假日类采用两字母ISO国家代码命名(比如美国是holidays.US,法国是holidays.FR),但你的目标列表里混合了全称(如Norway)和三字母代码(如FRA),所以首先需要把这些名称映射到库对应的类名,再通过动态方法调用类。

完整解决方案代码

import holidays
import pandas as pd
import numpy as np

# 第一步:把你的目标国家列表转换成holidays库对应的类名映射
country_mapping = {
    'FRA': 'FR',       # 法国
    'Norway': 'NO',    # 挪威
    'Finland': 'FI',   # 芬兰
    'US': 'US',        # 美国
    'Germany': 'DE',   # 德国
    'UnitedKingdom': 'GB',  # 英国(注意是GB而非UK)
    'Sweden': 'SE'     # 瑞典
}

# 初始化空列表,存储所有国家的节假日数据
all_holidays = []

# 循环遍历每个国家,动态获取节假日数据
for country_name, country_code in country_mapping.items():
    # 用getattr动态获取holidays模块中的对应国家类
    country_holiday_cls = getattr(holidays, country_code)
    # 实例化类,获取2014-2029年的节假日
    country_holiday_data = country_holiday_cls(years=np.arange(2014, 2030, 1))
    
    # 整理每条节假日数据,添加国家名称后存入总列表
    for date, holiday_name in sorted(country_holiday_data.items()):
        all_holidays.append({
            'Country': country_name,
            'Date': date,
            'Holiday': holiday_name
        })

# 转换为DataFrame格式
holidays_df = pd.DataFrame(all_holidays)
# 查看结果示例
print(holidays_df.head())

关键代码解释

  1. getattr(holidays, country_code):这是解决你错误的核心——它能根据字符串country_code的值,动态获取holidays模块对应的属性(即国家节假日类)。比如当country_code'US'时,就等价于调用holidays.US
  2. 添加国家标识:在每条数据中加入Country字段,方便后续区分不同国家的节假日。
  3. 结构化输出:通过pd.DataFrame()把零散的字典数据转换成规整的表格,满足你存入DataFrame的需求。

注意事项

如果后续需要添加其他国家,记得先确认holidays库对应的两字母ISO代码(可查阅库的官方文档),避免因代码错误导致找不到对应类。

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

火山引擎 最新活动