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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 12:45:08