从Google Sheet提取日期转整数适配QuantLib的问题求解
需求目标
- 从Google Sheet提取日期数据存入DataFrame,将每个日期的日、月、年分别转换为整数格式,供QuantLib库调用
- 若JSON格式实现更优,也可直接从Google Sheet获取日期后输出JSON,要求每个日期字段(日、月、年)均为整数格式
需求背景
适配QuantLib的Date类入参要求,该类需要传入整数格式的日、月、年参数,官方示例代码如下:
# 该代码要求日、月、年参数均为整数格式 from QuantLib import * valuation_date = Date(22, 8, 2018) print(valuation_date+2)
上述代码输出结果:
August 24th, 2018
现有实现与问题
现有代码如下:
Date_df = df['Date line 6'] date_lst = [] month_lst = [] year_lst = [] for i in Date_df: date_lst.append(int(i[0:2])) month_lst.append(int(i[3:4])) year_lst.append(int(i[-4:]))
存在问题:固定切片的写法无法适配个位数日期/月份的场景,比如日期为个位数时,i[0:2]会切到分隔符/,无法转换为整数触发报错。
解决方案
DataFrame格式输出方案
直接用pandas内置的日期处理能力实现,无需手动切片,自动适配各种格式的日期字符串:
import pandas as pd # 把日期列转为pandas datetime格式,自动适配/分隔的日期格式 # 如果你的日期是「日/月/年」格式就保留dayfirst=True,是「月/日/年」格式则删除该参数 df['Date line 6'] = pd.to_datetime(df['Date line 6'], dayfirst=True) # 直接提取整数格式的日、月、年,生成新列 df['day'] = df['Date line 6'].dt.day.astype(int) df['month'] = df['Date line 6'].dt.month.astype(int) df['year'] = df['Date line 6'].dt.year.astype(int) # 如果需要提取为单独的列表 date_lst = df['day'].tolist() month_lst = df['month'].tolist() year_lst = df['year'].tolist()
JSON格式输出方案
如果需要直接输出JSON供后续调用,可在上述代码基础上新增如下逻辑:
import json # 生成符合要求的JSON数组 date_json = df[['day', 'month', 'year']].to_json(orient='records') # 如需本地保存可执行以下代码 with open('dates_for_quantlib.json', 'w') as f: json.dump(json.loads(date_json), f, indent=2)
输出的JSON格式示例:
[ { "day": 22, "month": 8, "year": 2018 }, { "day": 8, "month": 9, "year": 2023 } ]
直接取JSON对应字段的整数值传入QuantLib的Date类即可正常使用。
内容的提问来源于stack exchange,提问作者Qureshi Owais
相关产品推荐
相关产品推荐

