【问题标题】:Using Excelwriter to write a DataFrame to a new sheet deletes all other sheets even when using append mode即使使用追加模式,使用 Excelwriter 将 DataFrame 写入新工作表也会删除所有其他工作表
【发布时间】: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()

【问题讨论】:

    标签: python excel pandas dataframe pandas.excelwriter


    【解决方案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 会有效地覆盖整个文件?
    • 我编辑了我的分析器并添加了一个附加链接,这应该可以在不加载数据框中的所有数据的情况下完成您的工作。有关更多示例,请点击链接
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2019-07-21
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多