Pandas如何将多个DataFrame导出为带指定Sheet名的Excel文件
问题说明
需要将40个DataFrame导出至同一个Excel文件,每个DataFrame对应一个独立工作表,工作表按顺序命名为Sheet1到Sheet40。原有实现尝试先将所有DataFrame追加到空白DataFrame后再导出,示例代码如下:
import pandas as pd import numpy as np def calculate_file(): sheet_df = pd.DataFrame() for i in range(40): #This is a toy dataframe random_data = np.random.randint(10,25,size=(5,3)) df = pd.DataFrame(random_data, columns=['Column_1','Column_2','Column_3']) sheet_df = sheet_df.append(df) return(sheet_df) calculate_file()
该代码无法实现导出40个独立工作表的预期效果。
问题原因
- 核心逻辑偏差:将多个DataFrame纵向追加合并为单个DataFrame的写法,导出时天然只能生成1个工作表,无法实现多sheet输出的需求
- 缩进错误:
sheet_df = sheet_df.append(df)语句位于for循环外部,循环执行完成后只会保留最后一轮生成的DataFrame,连合并40份数据的效果都无法实现 - 接口过时:pandas 2.0及以上版本已经正式移除DataFrame的
append方法,运行该代码会直接触发属性报错
正确实现方案
多工作表导出不需要提前合并DataFrame,借助pandas.ExcelWriter创建统一的文件写入句柄,在循环中逐个将DataFrame写入指定名称的工作表即可,参考代码如下:
import pandas as pd import numpy as np def calculate_file(save_path="result.xlsx"): # 初始化Excel写入上下文,执行结束后会自动保存、关闭文件 with pd.ExcelWriter(save_path, engine="openpyxl") as writer: for sheet_idx in range(1, 41): # 以下为示例DataFrame生成逻辑,替换为实际业务的DataFrame构造代码即可 random_data = np.random.randint(10, 25, size=(5, 3)) df = pd.DataFrame(random_data, columns=['Column_1', 'Column_2', 'Column_3']) # 将当前DataFrame写入对应序号的工作表,index=False表示不导出行索引 df.to_excel(writer, sheet_name=f"Sheet{sheet_idx}", index=False) # 调用函数即可在指定路径生成包含40个独立工作表的Excel文件 calculate_file()
注意事项
- 首次运行前需要安装xlsx写入依赖,执行命令:
pip install openpyxl - 禁止在for循环内部初始化
ExcelWriter对象,否则每次循环都会覆盖之前写入的内容,最终文件只会保留最后一个工作表 - 如果需要保留DataFrame的默认行索引,删除
to_excel方法中的index=False参数即可
内容的提问来源于stack exchange,提问作者Megan
相关产品推荐
相关产品推荐

