如何在Python中以DataFrame自身名称保存为CSV文件?
提取DataFrame变量名并保存为同名CSV文件
当你需要把随机命名的DataFrame保存成和变量名同名的CSV时,核心是找到变量名与DataFrame对象的对应关系,这里有两种实用方法:
方法一:遍历作用域匹配对象
变量名本质是指向对象的引用,我们可以遍历当前作用域内的所有变量,找到和目标DataFrame对象匹配的名字:
import pandas as pd import random import string # 模拟生成随机命名的DataFrame random_var = ''.join(random.choices(string.ascii_uppercase + string.digits, k=8)) globals()[random_var] = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]}) # 假设你持有这个DataFrame的引用(比如叫target_df) target_df = globals()[random_var] # 定义函数查找变量名 def find_var_name(obj): # 全局作用域用globals(),局部作用域替换为locals() for name, value in globals().items(): # 用is判断对象同一性,避免值相等但对象不同的情况 if value is obj: return name return None # 获取文件名并保存 file_name = f"{find_var_name(target_df)}.csv" target_df.to_csv(file_name)
注意:如果多个变量指向同一个DataFrame,该方法会返回第一个匹配到的名字;若DataFrame在函数内部等局部作用域,把globals()换成locals()即可。
方法二:创建时绑定变量名属性
更可靠的方式是在生成DataFrame时,直接给它绑定一个存储自身变量名的属性,后续直接调用属性就能拿到名字:
import pandas as pd import random import string def make_named_df(data): # 生成随机变量名 var_name = ''.join(random.choices(string.ascii_uppercase + string.digits, k=8)) df = pd.DataFrame(data) # 给DataFrame添加自定义属性存储变量名 df.variable_name = var_name # 将DataFrame存入全局作用域 globals()[var_name] = df return df # 创建带变量名属性的DataFrame my_df = make_named_df({'col1': [1,2,3], 'col2': [4,5,6]}) # 直接用属性获取文件名保存 my_df.to_csv(f"{my_df.variable_name}.csv")
这种方法不会有遍历作用域的不确定性,尤其适合批量生成随机命名DataFrame的场景。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

