如何在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
相关产品推荐
相关产品推荐

