Python循环写入两个DataFrame到同一Excel工作表时生成重复标签问题
你遇到的新建带数字后缀工作表的问题,核心原因是openpyxl引擎默认在追加模式下写入同名称工作表时,不会复用已有工作表,而是自动添加数字后缀生成新表;同时你分开两次创建ExcelWriter上下文打开文件,也没有配置对应参数指定复用已有工作表。
方案1(推荐,适配pandas 1.4.0及以上版本)
使用if_sheet_exists="overlay"参数,指定工作表存在时直接在表内叠加写入,同时建议把多个写入操作放在同一个ExcelWriter上下文内,避免重复打开文件:
# 路径前加r取消转义,避免路径中的特殊字符被错误转义 with pd.ExcelWriter(r'\\porfiler03\gtdshare\ERA5-MAPPING\PCA\PCA_ERA5_output.xlsx', engine="openpyxl", mode="a", if_sheet_exists="overlay") as writer: w.to_excel(writer, sheet_name=sheet) finalpcs.to_excel(writer, sheet_name=sheet, startrow=5)
如果是长循环逻辑需要多次写入同一个工作表,把循环放在ExcelWriter的上下文内部即可,无需每次循环都重新打开文件,性能也更优。
方案2(适配pandas 1.4.0以下版本)
如果你的pandas版本低于1.4.0,不支持if_sheet_exists参数,可以手动加载已有工作簿,把已存在的工作表信息同步给ExcelWriter后再写入:
from openpyxl import load_workbook file_path = r'\\porfiler03\gtdshare\ERA5-MAPPING\PCA\PCA_ERA5_output.xlsx' # 提前加载已有的工作簿文件 book = load_workbook(file_path) with pd.ExcelWriter(file_path, engine="openpyxl") as writer: # 同步已有工作簿和工作表信息到writer对象 writer.book = book writer.sheets = {ws.title: ws for ws in book.worksheets} w.to_excel(writer, sheet_name=sheet) finalpcs.to_excel(writer, sheet_name=sheet, startrow=5)
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

