背景:
根据这位大佬的方法,向Excel追加sheet时,遇到报错AttributeError: can't set attribute
Pandas 写入 Excel 的几种情形与方式,覆盖,新增,追加,对齐_pandas 写入excel_小玉的小本本的博客-优快云博客
原方法如下:
from openpyxl import load_workbook
s1 = pd.DataFrame(np.array([['s1', 's1', 's1', 's1']]), columns=['a', 'b', 'c', 'd'])
s2 = pd.DataFrame(np.array([['s2', 's2', 's2', 's2']]), columns=['a', 'b', 'c', 'd'])
s1.to_excel('test.xlsx', sheet_name='111', index=False)
book = load_workbook("test.xlsx")
with pd.ExcelWriter("test.xlsx") as writer:
writer.book = book
s2.to_excel(writer, sheet_name="222", index=False)
报错原因:
在 1.5 之前,所有属性都被视为私有属性,但未强制执行。
我们在 1.5 中公开了一些属性,但对您可以使用它们执行的操作进行了一些限制。例如,您不能设置一本书。
错误: ExcelWriter.book - 属性无法访问设置 ·问题 #48780 ·熊猫-开发/熊猫 ·GitHub
pandas.DataFrame.to_excel — pandas 0.22.0 documentation (pydata.org)
解决方法:
import pandas as pd
import numpy as np
s1 = pd.DataFrame(np.array([['s1', 's1', 's1', 's1']]), columns=['a', 'b', 'c', 'd'])
s2 = pd.DataFrame(np.array([['s2', 's2', 's2', 's2']]), columns=['a', 'b', 'c', 'd'])
s1.to_excel('test.xlsx', sheet_name='111', index=False)
with pd.ExcelWriter("test.xlsx", mode='a', engine='openpyxl') as writer:
s2.to_excel(writer, sheet_name="sheet2", index=False)
另:也可将pandas版本降级到 1.4.4 解决问题。