如何将工作区中所有Pandas DataFrame写入对应名称的Excel文件?
我来帮你修正这段代码,完美实现「每个DataFrame生成对应名称的Excel文件」的需求~
先拆解下你原代码里的几个问题:
- DataFrame默认没有
name属性,你试图打印df.name会直接报错 fmane = df+".xlsx"是把DataFrame对象和字符串拼接,完全不符合语法,必然抛出类型错误eval()存在安全风险,其实有更稳妥的方式获取当前作用域的变量
修正后的完整代码
import pandas as pd # 安全获取当前全局作用域中所有DataFrame,键是变量名,值是对应DataFrame对象 alldfs = {var_name: var_value for var_name, var_value in globals().items() if isinstance(var_value, pd.core.frame.DataFrame)} # 遍历每个DataFrame及其变量名 for df_name, df in alldfs.items(): print(f"正在处理DataFrame: {df_name}") # 用变量名直接生成Excel文件名 excel_file = f"{df_name}.xlsx" # 使用with语句自动管理文件资源,无需手动save with pd.ExcelWriter(excel_file) as writer: df.to_excel(writer, index=False) # index=False可选,用于去掉默认索引列 print(f"{excel_file} 已成功保存!")
关键改动说明
- 用变量名作为文件名:通过遍历
globals().items(),我们直接拿到了DataFrame的变量名(字典的键df_name),完美匹配你「文件名和DataFrame名称一致」的需求 - 替换不安全的eval():
globals()会返回当前全局作用域的所有变量,比eval()更安全,避免了潜在的代码注入风险 - 规范的文件管理:使用
with语句创建ExcelWriter,Python会自动处理文件的打开和关闭,无需手动调用writer.save(),减少出错概率 - 可选优化:
index=False可以避免把DataFrame的索引列写入Excel,如果你需要保留索引,去掉这个参数即可
在Spyder 4 + Python 3.8的环境下,这段代码可以直接运行,生成的每个Excel文件都会和你的DataFrame变量名完全对应。
内容的提问来源于stack exchange,提问作者Frash
相关产品推荐
相关产品推荐

