如何使用pandas仅更新替换Excel文件中的单个指定工作表
Excel工作表替换实现方案
原代码问题说明
- 直接以默认写入模式初始化
pd.ExcelWriter操作1.xlsx,会清空原文件全部内容,导致未修改的sheet_1、sheet_3丢失 - 写入参数设置了
startcol=1,会导致新内容从第二列开始写入,不符合整表替换的需求
依赖安装
需要提前安装openpyxl库支持Excel读写操作:
pip install openpyxl
修正后代码(适配pandas 1.4.0及以上版本)
import pandas as pd # 读取2.xlsx中的sheet_2数据 df_new_sheet2 = pd.read_excel('2.xlsx', sheet_name='sheet_2', engine='openpyxl') # 以追加模式打开1.xlsx,设置同名工作表直接替换 with pd.ExcelWriter('1.xlsx', mode='a', engine='openpyxl', if_sheet_exists='replace') as writer: df_new_sheet2.to_excel(writer, sheet_name='sheet_2', index=False)
代码逻辑说明
- 采用
mode='a'追加模式打开目标文件,保留原文件中其余工作表的全部数据 if_sheet_exists='replace'参数会自动检测同名工作表,存在就直接替换,不需要额外的遍历判断逻辑- 用上下文管理器
with语法处理ExcelWriter,会自动完成保存关闭操作,不需要手动调用save、close方法,避免资源泄漏
低版本pandas兼容代码
如果使用的pandas版本低于1.4.0不支持if_sheet_exists参数,可以使用以下兼容方案:
import pandas as pd # 读取1.xlsx中除了sheet_2之外的所有工作表数据 old_excel = pd.ExcelFile('1.xlsx', engine='openpyxl') sheet_map = {} for sheet_name in old_excel.sheet_names: if sheet_name != 'sheet_2': sheet_map[sheet_name] = old_excel.parse(sheet_name) # 读取2.xlsx的新sheet_2数据加入映射表 sheet_map['sheet_2'] = pd.read_excel('2.xlsx', sheet_name='sheet_2', engine='openpyxl') # 一次性写入所有数据到1.xlsx with pd.ExcelWriter('1.xlsx', engine='openpyxl') as writer: for sheet_name, df in sheet_map.items(): df.to_excel(writer, sheet_name=sheet_name, index=False)
内容的提问来源于stack exchange,提问作者user14784453
相关产品推荐
相关产品推荐

