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

如何获取列表中27个DataFrame的名称?KeyError: 'df_list'报错求解

嘿,这个问题其实是对globals()的用法理解出了点小偏差,咱们来拆解清楚:

你的操作错在哪?

你调用globals()[df_list]的时候犯了一个基础的字典使用错误:

  • globals()返回的是一个字典,其中键是字符串形式的变量名(比如"df1"),值才是对应的DataFrame对象。
  • 你传入的df_list是一个列表对象,不是字符串类型的键,Python会尝试把这个列表当作键去字典里查找,而globals()里根本没有这个键,所以自然抛出了KeyError。
正确的解决方法

根据你的需求,有两种靠谱的实现方式:

方式1:提前用字典关联名称和DataFrame(推荐)

与其先创建列表再反向找名称,不如一开始就用字典把变量名和对应的DataFrame绑定,这样后续获取名称和对象都更清晰可靠:

# 手动创建字典,把每个DataFrame和它的名称对应起来
df_dict = {
    "df1": df1,
    "df2": df2,
    # ... 依次添加到df27
    "df27": df27
}

# 获取所有DataFrame的名称列表
dataframe_names = list(df_dict.keys())
# 如果你需要DataFrame列表,直接取字典的值即可
df_list = list(df_dict.values())

这个方法最稳妥,因为一个DataFrame对象可能被多个变量引用,字典能明确对应你想要的那个名称。

方式2:从globals中反向匹配已有的df_list

如果你已经有了df_list,想从全局命名空间里找到这些对象对应的变量名,可以通过遍历globals()的键值对,匹配对象的唯一内存地址(避免值相同但不是同一个对象的干扰):

# 遍历全局命名空间,匹配df_list中的对象
dataframe_names = []
for df in df_list:
    for name, obj in globals().items():
        # 用id()判断是否为同一个对象
        if id(obj) == id(df):
            dataframe_names.append(name)
            break

⚠️ 注意:如果有多个变量指向同一个DataFrame,这个方法会返回第一个匹配到的变量名;如果你的DataFrame是在函数内部创建的(不是全局变量),那得用locals()代替globals()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:38