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

如何修改转置后DataFrame的索引名与列标题(Yahoo财经场景)

解决yfinance转置后重命名索引和列的问题

问题分析

你遇到的IndexError是因为尝试用字符串匹配Timestamp类型的列名,两者类型不匹配导致无法找到对应列。当日行情数据的列名是Timestamp对象,不是你写的字符串'2023-01-06 00:00:00',所以rename方法无法定位目标列,引发错误。

解决方案

不需要依赖具体的日期字符串,直接通过修改索引名和列名的方式实现需求,以下是两种可靠的方法:

方法1:直接修改索引名和列名

import yfinance as yf

components = ['ABEV3.SA', 'ALPA4.SA', 'AMER3.SA']
todays_data = yf.download(components, period='1d')

# 提取Adj Close数据
adj_close = todays_data['Adj Close']
# 转置DataFrame
df_transposed = adj_close.transpose()

# 修改索引名为"Code"
df_transposed.index.name = 'Code'
# 直接修改列名为"Close"(当日数据仅1列,无需匹配日期)
df_transposed.columns = ['Close']

print(df_transposed.head())

方法2:用reset_index重置索引后重命名

这种方式更直观,适合需要将索引转为普通列的场景:

import yfinance as yf

components = ['ABEV3.SA', 'ALPA4.SA', 'AMER3.SA']
todays_data = yf.download(components, period='1d')

adj_close = todays_data['Adj Close']
# 转置后将索引转为列,并重命名所有列
df_final = adj_close.transpose().reset_index()
df_final.columns = ['Code', 'Close']

print(df_final.head())

说明

两种方法都能避免日期格式匹配问题,因为当日行情数据仅包含一行(一个日期),转置后也只有一列,直接修改列名即可,无需依赖具体的日期值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:40:31