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

如何在Python函数中获取Pandas DataFrame的变量名并打印?

获取DataFrame变量名并正确删除重复对象

首先明确核心事实:Python里变量是指向对象的引用,对象本身不存储对应的变量名,所以没法直接从DataFrame对象拿到它的变量名,但可以通过两种方式实现你的需求:

方法1:直接传变量名字符串(最稳妥)

修改函数,让它同时接收DataFrame对象和对应的变量名字符串,逻辑清晰且无歧义:

def check_eq(df1, df2, df2_name):
    if df1.equals(df2):
        # 操作全局作用域的变量,删除对应名称的DataFrame
        del globals()[df2_name]
        print(f"Deleted {df2_name}")

使用示例:

import pandas as pd

df_sales = pd.DataFrame({'id': [1,2], 'amount': [100, 200]})
df_duplicate = df_sales.copy()

check_eq(df_sales, df_duplicate, 'df_duplicate')

方法2:遍历命名空间找变量名(不推荐,有歧义)

如果不想手动传名字,可以遍历当前作用域的变量,匹配指向目标DataFrame的变量名。但要注意:一个DataFrame对象可能被多个变量引用,这种方法会返回所有匹配的名字,容易出问题。

示例代码:

def get_matching_names(df, scope=globals()):
    # 遍历作用域,找出所有指向该DataFrame对象的变量名
    return [name for name, obj in scope.items() if obj is df]

def check_eq(df1, df2):
    if df1.equals(df2):
        target_names = get_matching_names(df2)
        for name in target_names:
            del globals()[name]
            print(f"Deleted {name}")

关键注意事项

  • 你原代码里的del[df2]是语法错误,正确写法是del df2,但这个操作只会删除函数内部的局部引用,不会删掉全局作用域里的变量,所以必须用globals()来操作全局变量(如果变量在全局作用域)。
  • 如果DataFrame是函数内的局部变量,把globals()换成locals()即可,但要注意局部变量的生命周期限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:40:46