pandas如何在已有excel的sheet里完全覆盖地写入数据?pandas如何删除excel里的一行数据?

发布于 2022-09-07 12:28:43 字数 697 浏览 102 评论 0

在使用pandas进行文件写入时,如果原来sheet已有数据,则新写入数据在原来数据上进行不删除地复写。比如说原来有4行数据,我想删掉一行,read为dataframe后drop掉一行,得到3行新的数据,再次to_excel后只覆盖了前3行,表格中的第4行还在。
怎样才能够真正地删除掉excel中的一行使得行数-1?
我删掉0行后写入第123行,原来第3行还在。
clipboard.png

以下是我的代码(参照了stackoverflow上“对一个sheet写入而不影响其他sheeets的方法”).

# 读取后drop
data = pd.read_excel("data.xlsx", sheetname=sheet_name)
mydata = data.drop([0], axis=0)
# 保存新的数据
book = load_workbook('data.xlsx')
writer = pd.ExcelWriter('data.xlsx',engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
mydata.to_excel(writer, "mysheet")
writer.save()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怪异←思 2022-09-14 12:28:43

如果要全部覆盖的话, 可以把原来的数据全部清除, 然后把新数据写入.
具体代码:

# 读取后drop
data = pd.read_excel("data.xlsx", sheet_name=sheet_name)
mydata = data.drop([0], axis=0)
# 保存新的数据
book = load_workbook('data.xlsx')
writer = pd.ExcelWriter('data.xlsx',engine='openpyxl')
writer.book = book
# 清除原来的数据
idx = book.sheetnames.index('mysheet')
book.remove(book.worksheets[idx])
book.create_sheet('mysheet', idx)

writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
mydata.to_excel(writer, “mysheet”)
writer.save()

参考:How to clear a range of values in an Excel workbook using OpenPyXl
注意, 这样会把原来mysheet的所有其它数据清除!

蓝天白云 2022-09-14 12:28:43

谢谢大佬,有用。但是我目前想要将一个excel中几张sheet改写。能否请教一下。当我需要将其中的几个sheet但是又不是全部改写覆盖的话应该如何优化这段代码?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文