如何修改转置后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
相关产品推荐
相关产品推荐

