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

如何基于另一DataFrame的唯一日期值为新DataFrame设置日期索引?

问题解决:正确设置日期字段为DataFrame索引并指定索引名

问题背景

想基于DataFrame data 的expiration_date字段唯一值生成新的date_df,要求把该日期字段设为索引,且索引名为expiration_date,但遇到以下问题:

  • 执行date_df.set_index('expiration_date', inplace=True)时触发KeyError,提示找不到该列
  • 调整代码后出现索引格式异常(比如1970年初始日期和目标日期并存)、索引名无法正确设置

错误原因分析

  1. 列名不匹配:用pd.DataFrame(data["expiration_date"].unique())创建date_df时,生成的DataFrame列名是默认的0,不是expiration_date,所以set_index找不到对应列。
  2. 错误转换索引:之前把date_df的默认整数索引(0、1、2...)转成日期,这会被解析为1970-01-01开始的时间戳,导致出现无关的初始日期。

正确实现步骤

方法一:先创建带指定列名的DataFrame,再设为索引

# 生成包含唯一日期的DataFrame,指定列名为'expiration_date'
date_df = pd.DataFrame(data["expiration_date"].unique(), columns=['expiration_date'])
# 将'expiration_date'列设置为索引,索引名自动沿用列名
date_df.set_index('expiration_date', inplace=True)

方法二:直接用唯一日期创建索引,再生成DataFrame

# 获取唯一日期并转为DatetimeIndex
unique_dates = pd.DatetimeIndex(data["expiration_date"].unique())
# 创建DataFrame并指定索引、索引名
date_df = pd.DataFrame(index=unique_dates)
date_df.index.name = 'expiration_date'

完整修正后的代码

替换原代码中# create date dataframe之后的部分:

import pandas as pd
import requests

raw_data = requests.get(f"https://cdn.cboe.com/api/global/delayed_quotes/options/SPY.json")
dict_data = pd.DataFrame.from_dict(raw_data.json())
spot_price = dict_data.loc["current_price", "data"]
# create dataframe from options key
data = pd.DataFrame(dict_data.loc["options", "data"])

# 优化日期提取逻辑,精准匹配6位日期码(如240920对应2024-09-20)
data['expiration_date'] = '20' + data['option'].str.extract(r'[A-Z](\d{6})')[0]
data["expiration_date"] = pd.to_datetime(data["expiration_date"], format="%Y%m%d")  

# 正确创建date_df并设置索引
date_df = pd.DataFrame(data["expiration_date"].unique(), columns=['expiration_date'])
date_df.set_index('expiration_date', inplace=True)

print(date_df.index)
print(date_df.index.name)
print(date_df)

补充说明

  • 原代码中日期提取的正则r"[A-Z](\d+)"可能提取到非6位数字,建议用r'[A-Z](\d{6})'精准匹配期权代码中的日期段,避免pd.to_datetime解析出错。
  • 用set_index设置索引后,索引名会自动沿用原列名,无需额外手动设置;若用方法二创建,则需要手动指定index.name。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:15:51