如何获取列表中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
相关产品推荐
相关产品推荐

