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

DataFrame名称显示异常为i,如何重置get_df_name返回的正确名称?

问题原因及解决方法

为什么前两个DataFrame返回名称是i?

你的get_df_name函数通过全局变量查找与目标DataFrame内存地址一致的变量名,但在for循环中,变量i会依次指向df1、df2等对象。当循环处理df1时,globals()['i']就是df1本身,此时列表推导式会同时匹配到i和df1两个变量名,而你取了列表的第一个元素(刚好是i),所以返回错误名称。

解决方法

方法1:修改函数排除循环变量

在查找时排除循环变量i,确保取到原始变量名:

tables=[df1,df2,df3,df4,df5]
def get_df_name(df):
    names = [x for x in globals() if globals()[x] is df and x != 'i']
    return names[0] if names else None
for i in tables:
    print(get_df_name(i), list(i.columns))

方法2:直接配对名称与DataFrame(推荐)

避免依赖全局变量查找,直接存储名称和DataFrame的元组,这是最可靠的方式:

tables = [('df1', df1), ('df2', df2), ('df3', df3), ('df4', df4), ('df5', df5)]
for name, df in tables:
    print(name, list(df.columns))

方法3:利用DataFrame的name属性

你之前设置df1.name='df1'无效是因为函数没读取这个属性,修改函数即可:

# 先给每个DataFrame设置name属性
df1.name = 'df1'
df2.name = 'df2'
df3.name = 'df3'
df4.name = 'df4'
df5.name = 'df5'

tables=[df1,df2,df3,df4,df5]
def get_df_name(df):
    return df.name
for i in tables:
    print(get_df_name(i), list(i.columns))

注意事项

依赖全局变量查找对象名称的方式存在缺陷(比如多个变量指向同一对象时会出错),仅适合临时查看列名的场景,正式代码中建议使用第二种配对存储的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:25:52