You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Pandas至1.5.1后写入Excel遇AttributeError问题求助

解决Pandas 1.5.1写入Excel的两个错误

问题根源

  1. zipfile.BadZipFile错误:Pandas 1.2.0+版本中,pd.ExcelWriter()默认以写入模式(mode='w')创建文件,会直接清空原有Excel文件,导致后续load_workbook无法读取有效Zip格式的Excel文件。
  2. AttributeError: property 'sheets'...错误:Pandas升级后,OpenpyxlWriter的sheets属性改为只读,无法直接赋值修改。

修正后的代码

from openpyxl import load_workbook
import pandas as pd

# 先读取已有数据,获取追加的起始行
reader = pd.read_excel('Resultados.xlsx')
start_row = len(reader) + 1

# 加载现有工作簿,避免被ExcelWriter清空
book = load_workbook('Resultados.xlsx')
# 创建ExcelWriter时,通过engine_kwargs传入已加载的工作簿
writer = pd.ExcelWriter('Resultados.xlsx', engine='openpyxl', engine_kwargs={'book': book})

# 将新数据写入指定位置
df = pd.DataFrame.from_dict(dict_)
df.to_excel(writer, index=False, header=False, startrow=start_row)

writer.close()

更简洁的替代写法(使用追加模式)

如果不需要操作工作簿的其他内容,直接用mode='a'和if_sheet_exists='overlay'参数更高效:

import pandas as pd

# 读取已有数据获取起始行
reader = pd.read_excel('Resultados.xlsx')
start_row = len(reader) + 1

df = pd.DataFrame.from_dict(dict_)
# 以追加模式打开,在现有sheet指定位置写入,不清除原有数据
with pd.ExcelWriter('Resultados.xlsx', engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
    df.to_excel(writer, index=False, header=False, startrow=start_row)

关键注意事项

  • 必须先加载工作簿再创建ExcelWriter:避免原有文件被提前清空引发Zip格式错误。
  • 不要手动修改writer.sheets:Pandas 1.2+版本中该属性为只读,通过engine_kwargs或追加模式可自动处理工作表映射。

内容的提问来源于stack exchange,提问作者Moises Felipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:10:27