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

如何借助iShares列表动态拼接多个同结构pandas DataFrame

问题原因

你报错的核心原因有两个:

  1. 你生成的Lookup_Sector_list里存的是DataFrame的名字字符串,不是DataFrame对象本身,pd.concat()无法直接处理字符串
  2. 用for i in 列表遍历的时候,i直接就是列表里的元素(也就是你存的名字字符串),不是列表的整数索引,你写Lookup_Sector_list[i]相当于用字符串当列表下标,自然触发TypeError: list indices must be integers or slices, not str
可直接运行的解决方案(适配你现有代码逻辑)

如果你已经提前定义好了所有Lookup_Sector_xxx格式的独立DataFrame变量,可以通过Python内置的globals()字典动态取出对应名字的变量对象,再统一拼接,不需要硬编码所有变量名:

import pandas as pd

# 你原有的iShares列表保持不变
iShares = ['IE0005042456', 'IE00B1FZS574', 'IE00B0M62Q58', 'IE00BF4RFH31', 'IE0031442068', 'IE00BGL86Z12', 'IE00BD45KH83']

# 收集所有对应的DataFrame对象
df_collection = []
for code in iShares:
    df_name = f"Lookup_Sector_{code}"
    # globals()存储了所有全局变量,键是变量名字符串,值是变量本身
    df_collection.append(globals()[df_name])

# 一次性完成拼接,加ignore_index=True可以重置拼接后DataFrame的索引,避免索引重复
Lookup_Sector = pd.concat(df_collection, ignore_index=True)

也可以写成列表推导式的形式,更简洁:

Lookup_Sector = pd.concat(
    [globals()[f"Lookup_Sector_{code}"] for code in iShares],
    ignore_index=True
)
更推荐的规范写法

如果你还在生成这些Lookup_Sector_xxx变量的阶段,不建议把同结构的DataFrame定义成一堆独立的全局变量,更好的方式是从一开始就把它们存在字典里,后续处理更方便,也不需要动态取变量:

# 初始化字典存储所有板块DataFrame
sector_df_map = {}
for code in iShares:
    # 这里替换成你生成单个DataFrame的实际逻辑,比如读文件、拉接口数据等
    # 示例:df = pd.read_excel(f"sector_{code}.xlsx")
    sector_df_map[code] = df

# 拼接时直接取字典所有值即可
Lookup_Sector = pd.concat(sector_df_map.values(), ignore_index=True)

内容的提问来源于stack exchange,提问作者Economist Learning Python

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:57:28