Pandas向Excel指定工作表追加数据时如何保留其他工作表?
解决Excel追加数据时保留其他工作表的问题
你的代码问题在于:pd.ExcelFile是只读的文件对象,直接用to_excel写入这个对象时,会生成仅包含当前DataFrame的新文件,覆盖原文件的所有其他工作表。要保留所有工作表,可采用以下两种方案:
方法一:读取所有工作表后重新写入(兼容所有Excel格式)
该方法先将原文件所有工作表读入内存,更新log表后再全部写回,适用于.xls和.xlsx格式:
import pandas as pd # 读取原文件所有工作表,存储为字典(键=表名,值=对应DataFrame) xls = pd.ExcelFile('myfile.xlsx') sheet_data = {sheet: xls.parse(sheet) for sheet in xls.sheet_names} # 构造新增数据并追加到log表 new_data = {'Date': [2023], 'Time': [180855], 'Q': ['2']} df_new = pd.DataFrame(new_data) sheet_data['log'] = pd.concat([sheet_data['log'], df_new], ignore_index=True) # 将所有工作表写回原文件 with pd.ExcelWriter('myfile.xlsx') as writer: for sheet_name, df in sheet_data.items(): df.to_excel(writer, sheet_name=sheet_name, index=False)
方法二:直接追加并替换log表(仅适用于.xlsx格式)
如果是.xlsx文件,可借助openpyxl引擎以追加模式写入,无需读取所有工作表,效率更高:
需先安装依赖库:
pip install openpyxl
import pandas as pd # 读取原log表数据 df_log = pd.read_excel('myfile.xlsx', sheet_name='log') # 构造新增数据并合并 new_data = {'Date': [2023], 'Time': [180855], 'Q': ['2']} df_final = pd.concat([df_log, pd.DataFrame(new_data)], ignore_index=True) # 以追加模式打开文件,替换原log表 with pd.ExcelWriter( 'myfile.xlsx', mode='a', engine='openpyxl', if_sheet_exists='replace' ) as writer: df_final.to_excel(writer, sheet_name='log', index=False)
关键注意事项
- 写入时务必添加
index=False,避免将DataFrame的索引列写入Excel。 - 方法二中
if_sheet_exists='replace'会用合并后的新数据替换原log表,避免重复表头;若用overlay会直接在原数据后追加(会重复表头,不推荐)。 - 处理
.xls格式文件只能用方法一,因为xlwt引擎不支持追加模式。
内容的提问来源于stack exchange,提问作者scotmanDavid
相关产品推荐
相关产品推荐

