如何将DataFrame追加写入Excel文件而不覆盖原有数据
解决方案
前置依赖
首先确保你已经安装了openpyxl库,pandas默认的xlsxwriter引擎不支持追加写入Excel的操作,执行以下命令安装:
pip install openpyxl
场景1:追加数据到已有工作表(同Sheet末尾追加,不覆盖原有内容)
适用于需要把新DataFrame加到已有Sheet的最后一行的场景:
import pandas as pd import os file_path = r'C:\Users\user_name\Downloads\test.xlsx' target_sheet = 'Sheet1' # 替换为你实际的工作表名称 if not os.path.exists(file_path): # 文件不存在时首次写入,保留表头 df.to_excel(file_path, sheet_name=target_sheet, index=False) else: # 读取原有工作表的内容 old_data = pd.read_excel(file_path, sheet_name=target_sheet) # 拼接新旧数据,要求新旧DataFrame的列名、列顺序完全一致 combined_data = pd.concat([old_data, df], ignore_index=True) # 写入拼接后的内容,替换原有工作表 with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer: combined_data.to_excel(writer, sheet_name=target_sheet, index=False)
场景2:追加数据到新工作表(新增独立Sheet,不修改原有Sheet内容)
适用于需要把新DataFrame写入同一个Excel的新Sheet页的场景:
import pandas as pd file_path = r'C:\Users\user_name\Downloads\test.xlsx' new_sheet = 'Sheet2' # 替换为新Sheet的名称,不能和已有Sheet重名 with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='new') as writer: df.to_excel(writer, sheet_name=new_sheet, index=False)
常见注意事项
if_sheet_exists参数要求pandas版本≥1.4.0,如果你使用的是更低版本,可以先读取Excel内所有Sheet的内容,替换/新增对应Sheet后整体回写- 同Sheet追加时请确保新DataFrame的列名、列顺序和原有数据完全一致,否则会出现列错位、空列的问题
- 写入时如果不需要保留pandas的默认索引列,建议加上
index=False参数
内容的提问来源于stack exchange,提问作者Raspberry Lemon
相关产品推荐
相关产品推荐

