即使使用追加模式,使用 Excelwriter 将 DataFrame 写入新工作表也会删除所有其他工作表
Posted
技术标签:
【中文标题】即使使用追加模式,使用 Excelwriter 将 DataFrame 写入新工作表也会删除所有其他工作表【英文标题】:Using Excelwriter to write a DataFrame to a new sheet deletes all other sheets even when using append mode 【发布时间】:2021-01-28 01:26:39 【问题描述】:我有一个要附加到的 .xlsx 文件。我正在使用:
excel_writer = pd.ExcelWriter('asdf.xlsx', engine='openpyxl', mode='a')
df.to_excel(excel_writer, sheet_name='dummy', index=False)
excel_writer.close()
确实成功创建了工作表“虚拟”,但删除了“asdf.xlsx”中的所有其他现有工作表。我正在使用附加模式,所以我不太确定还要检查哪里。 运行 Pandas 0.20.1 版
我尝试了docs for 0.20.1 中的代码,但它也覆盖了所有内容。
如果传递一个现有的 ExcelWriter 对象,那么工作表将是 添加到现有工作簿。这可以用来保存不同的 DataFrames 到一个工作簿:
writer = pd.ExcelWriter('output.xlsx')
df1.to_excel(writer,'Sheet1')
df2.to_excel(writer,'Sheet2')
writer.save()
【问题讨论】:
【参考方案1】:问题是,您误解了附加功能。这意味着,您追加到当前的 excelwriter,但如果您未设置任何模式,则会创建一个新的空 excel 文件。您必须将 ExcelWriter 的模式设置为a
(附加)。这将在您每次运行时附加新工作表:
import pandas as pd
from openpyxl import load_workbook
data = [
"a": 1, "b": 2
]
df = pd.DataFrame(data)
df2 = pd.DataFrame(data)
book = load_workbook("output.xlsx")
writer = pd.ExcelWriter('output.xlsx', mode="a")
if "Sheet11" not in book.sheetnames:
df.to_excel(writer, 'Sheet11')
if "Sheet21" not in book.sheetnames:
df2.to_excel(writer, 'Sheet21')
writer.save()
print(book.sheetnames)
编辑:
已添加load_workbook
这个答案的一部分是基于this answer
【讨论】:
那么有没有办法用你想要的“输出”文件中已有的任何数据填充 ExcelWriter?这样当你追加时,你真的是在追加而不是覆盖?我认为你上面的内容不会那样做 以上这些行将始终附加数据,如果工作表已经存在,它将附加一个其他名称。如果你想从 excel 文件中读取数据,你应该看看pd.read_excel
因此,如果不先将整个 excel 文件提取到数据帧 a、b、c 中,然后再将工作表“d”粘贴到由工作表 [a、b、c] 组成的 excel 文件,就没有干净的方法一起写 a,b,c,d 会有效地覆盖整个文件?
我编辑了我的分析器并添加了一个附加链接,这应该可以在不加载数据框中的所有数据的情况下完成您的工作。有关更多示例,请点击链接以上是关于即使使用追加模式,使用 Excelwriter 将 DataFrame 写入新工作表也会删除所有其他工作表的主要内容,如果未能解决你的问题,请参考以下文章
即使 Web 浏览器控制台中没有错误,d3 js 饼图也没有显示。和 SVG 正在追加
使用 excelwriter 写入 Excel 文件不提供文件
使用 Pandas/ExcelWriter 为单元格中的文本部分着色
使用 Pandas Excelwriter 写入 StringIO 对象?