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

如何用R或Python批量获取多国节假日并生成带ISO码的数据表

需求说明

希望通过循环或最高效的方式遍历R(或Python)中的一系列日历,输出所有节假日(后续还计划覆盖所有工作日、标记周末,分两部分实现),最终目标得到结构如下的DataFrame:

Country | ISO Code (if available) | Dates
United States of America| US| 12.24.2020
United States of America| US| 12.25.2020
United States of America| US| 01.01.2021
United Kingdom| UK| 12.24.2020
United Kingdom| UK| 12.25.2020
United Kingdom| UK| 01.01.2021
问题修复方案

R端修复

原函数只能接收单个日历名称参数,直接传入列表会报错,用迭代函数批量处理即可,修改后代码如下:

library(RcppQuantuccia)
library(tidyverse)
library(data.table)

fun_Holidays <- function(cal) {
  setCalendar(cal)
  dt <- data.table(
    Country = cal,
    `ISO Code (if available)` = NA_character_, # 可手动补充日历名和ISO码的映射表替换NA
    Dates = getHolidays(as.Date("2019-01-01"), as.Date("2030-12-31"))
  )
  # 转换为你需要的日期格式
  dt$Dates <- format(dt$Dates, "%m.%d.%Y")
  return(dt)
}
# 批量遍历所有可用日历,合并为总表
all_holidays_r <- rbindlist(lapply(calendars, fun_Holidays))

Python端修复

你代码里的code变量没有在循环内动态赋值,默认用了全局环境的固定值,才会所有行都显示NZ,补充国家名到ISO码的映射即可,修改后代码如下:

import pandas as pd
import numpy as np
import holidays
import pycountry

# 构造国家名到ISO 2位码的映射
def get_iso_code(country_name):
    try:
        return pycountry.countries.lookup(country_name).alpha_2
    except:
        # 特殊地区手动匹配
        special_map = {
            "England": "GB-ENG",
            "Scotland": "GB-SCT",
            "Wales": "GB-WLS",
            "NorthernIreland": "GB-NIR",
            "HongKong": "HK",
            "Curacao": "CW",
            "PortugalExt": "PT",
            "IsleOfMan": "IM",
            "Korea": "KR"
        }
        return special_map.get(country_name, np.nan)

all_holidays = []
country_list = ['Angola','Argentina','Aruba','Australia','Austria','Bangladesh','Belarus','Belgium','Botswana','Brazil',
                'Bulgaria','Burundi','Canada','Chile','China','Colombia','Croatia','Curacao','Czechia','Denmark','Djibouti','DominicanRepublic',
                'Egypt','England','Estonia','Finland','France','Georgia','Germany','Greece','Honduras','HongKong','Hungary','Iceland','India','Ireland','IsleOfMan',
                'Israel','Italy','Jamaica','Japan','Kenya','Korea','Latvia','Lesotho','Lithuania','Luxembourg','Malaysia','Malawi','Mexico','Morocco','Mozambique','Netherlands',
                'Namibia','NewZealand','Nicaragua','Nigeria','NorthernIreland','Norway','Paraguay','Peru','Poland','Portugal','PortugalExt','Romania','Russia','SaudiArabia','Scotland',
                'Serbia','Singapore','Slovakia','Slovenia','SouthAfrica','Spain','Swaziland','Sweden','Switzerland','Turkey','Ukraine','UnitedArabEmirates','UnitedKingdom',
                'UnitedStates','Venezuela','Vietnam','Wales','Zambia','Zimbabwe']

for country in country_list:
    code = get_iso_code(country)
    for date, holiday_name in holidays.CountryHoliday(country, years = np.arange(2018,2030,1)).items():
        all_holidays.append({
            'Country': country,
            'ISO Code (if available)': code,
            'Dates': date.strftime("%m.%d.%Y")
        })
all_holidays_df = pd.DataFrame(all_holidays)[["Country", "ISO Code (if available)", "Dates"]]

如果要使用workalendar导出总表,核心逻辑和上述实现一致,循环遍历workalendar的所有国家类、提取指定年份的节假日整理为目标结构即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:06