升级Pandas至1.5.1后写入Excel遇AttributeError问题求助
解决Pandas 1.5.1写入Excel的两个错误
问题根源
zipfile.BadZipFile错误:Pandas 1.2.0+版本中,pd.ExcelWriter()默认以写入模式(mode='w')创建文件,会直接清空原有Excel文件,导致后续load_workbook无法读取有效Zip格式的Excel文件。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
相关产品推荐
相关产品推荐

