新版本pandas,向Excel追加sheet

背景:

根据这位大佬的方法,向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 中公开了一些属性,但对您可以使用它们执行的操作进行了一些限制。例如,您不能设置一本书。

35ee415cb6424ed0a67d498349154e4c.png

 错误: 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 解决问题。

 

在Qt中实现Excel文件的追加写入,通常会使用pandas库(因为其数据处理功能强大)配合xlwt或openpyxl库来进行操作,这两个库分别支持旧版的Excel .xls和新版本.xlsx格式。 以下是使用Python + Qt的一种常见步骤: 1. 首先,在Qt项目的构建环境中,需要安装必要的Python库。可以在`qmake`的预处理器指令(`PREPROCESSORDEFINES`)中添加`QT_PREFERRED_QT_LIB=python3`,以便链接到Python3。 2. 在Python部分,导入所需的模块: ```python import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import QFile, QTextStream import pandas as pd ``` 3. 定义一个函数来写入Excel文件: ```python def append_to_excel(filename, data): writer = pd.ExcelWriter(filename, engine='openpyxl', mode='a') # 使用openpyxl追加模式 df = pd.DataFrame(data) df.to_excel(writer, sheet_name='Sheet1', index=False) # 写入数据到默认sheet writer.save() ``` 4. 在Qt中,你可以触发这个函数来完成写入: ```cpp QFile file("your_file.xlsx"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "Error opening file."; } else { QTextStream out(&file); // 在这里构造你要追加的数据结构 python_data = ... # 例如:{'Column1': [value1, value2], 'Column2': [value3, value4]} QString str_data = QPyEval.toVariant(python_data).toString(); // 将Python字典转换成字符串 out << str_data << "\n"; // 写入文件 out.flush(); // 然后在适当的时候调用append_to_excel函数,将str_data传递给它 } file.close(); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fbb_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值