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

使用QuantLib循环获取多币种假期列表报错的解决方法

解决QuantLib循环获取多币种假期列表的问题

错误原因分析

你遇到的module 'QuantLib' has no attribute 'df_calendar'错误,是因为错误地把自己定义的DataFrame df_calendar当成了QuantLib模块的属性(写成了ql.df_calendar)。另外代码里还有几处逻辑问题:

  • 存储结果的字典c未提前初始化
  • 列表a被当作字典使用,日期转换的循环逻辑有误
  • CSV中的日历名称是带括号的字符串(如UnitedStates()),无法直接传入holidayList,需要先处理成可实例化的QuantLib日历类

修正后的代码

import pandas as pd
import QuantLib as ql
import datetime

# 读取包含币种、国家、日历的CSV文件
df_calendar = pd.read_csv('your_file.csv') 

startdate = ql.Date(1, 12, 2019)
enddate = ql.Date(31, 12, 2022)

def ql_to_datetime(d):
    return datetime.date(d.year(), d.month(), d.dayOfMonth())

# 初始化存储各币种假期的字典
ccy_holidays = {}

# 遍历DataFrame的每一行
for idx, row in df_calendar.iterrows():
    ccy = row['CCY']
    # 处理日历名称:去掉末尾的括号,提取类名
    calendar_class_name = row['Calendar'].strip().replace('()', '')
    # 动态获取QuantLib中的日历类并实例化
    target_calendar = getattr(ql, calendar_class_name)()
    # 获取假期列表并转换为Python datetime格式
    holiday_dates = [ql_to_datetime(date) for date in ql.Calendar.holidayList(target_calendar, startdate, enddate)]
    # 将结果存入字典
    ccy_holidays[ccy] = holiday_dates

# 输出各币种的假期列表
for ccy, holidays in ccy_holidays.items():
    print(f"{ccy} 假期列表:")
    print(holidays)

关键修正点说明

  • 使用getattr(ql, calendar_class_name)()实现从字符串类名到QuantLib日历实例的转换,解决动态调用日历类的问题
  • 提前初始化字典ccy_holidays,避免键不存在的报错
  • 用列表推导式简化日期转换逻辑,代码更简洁高效
  • 改用iterrows()遍历DataFrame,可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:55:11