【问题标题】:Overwrite an excel sheet with pandas dataframe without affecting other sheets用 pandas 数据框覆盖 Excel 工作表而不影响其他工作表
【发布时间】:2021-12-17 05:33:19
【问题描述】:

我想用 Pandas 数据框覆盖 excel 文件中的现有工作表,但不希望对同一文件的其他工作表进行任何更改。如何做到这一点。 我尝试了下面的代码,但不是覆盖,而是将数据附加到“Sheet2”中。

import pandas as pd
from openpyxl import load_workbook

book = load_workbook('sample.xlsx')
writer = pd.ExcelWriter('sample.xlsx', engine = 'openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, 'sheet2', index = False)
writer.save()

【问题讨论】:

    标签: python excel pandas openpyxl


    【解决方案1】:

    我没有找到除此之外的任何其他选项,这对您来说是一个快速的解决方案。

    我相信仍然没有直接的方法可以做到这一点,如果我错了,请纠正我。这就是我们需要使用这种合乎逻辑的方式的原因。

    import pandas as pd
    
    def write_excel(filename,sheetname,dataframe):
        with pd.ExcelWriter(filename, engine='openpyxl', mode='a') as writer: 
            workBook = writer.book
            try:
                workBook.remove(workBook[sheetname])
            except:
                print("Worksheet does not exist")
            finally:
                dataframe.to_excel(writer, sheet_name=sheetname,index=False)
                writer.save()
    
    df = pd.DataFrame({'Col1':[1,2,3,4,5,6], 'col2':['foo','bar','foobar','barfoo','foofoo','barbar']})
    
    write_excel('PRODUCT.xlsx','PRODUCTS',df)
    

    如果您觉得这有帮助,请告诉我,如果您需要任何其他更好的解决方案,请联系我。

    【讨论】:

    • 我试过了,但它删除了文件中的所有其他工作表
    • 不,当然不是。我试过了。您是否传递了正确的工作表名称?
    【解决方案2】:

    类似于 Gavaert 的回答...对于 Pandas 1.3.5,添加 'if_sheet_exists="replace"' 选项:

    import pandas as pd
    
    with pd.ExcelWriter("file.xlsx", engine="openpyxl", mode="a", if_sheet_exists="replace") as writer:
        df.to_excel(writer, 'Logs', index=False)
    

    【讨论】:

    • 我收到此错误 io.UnsupportedOperation: truncate
    • 它会创建 Logs1 的副本
    【解决方案3】:

    由于 Pandas 版本 1.3.0 on_sheet_existsExcelWriter 的一个选项。可以这样使用:

    import pandas as pd
    
    with pd.ExcelWriter("my_sheet.xlsx",engine="openpyxl",mode="a",on_sheet_exists="replace") as writer:
        pd.write_excel(writer,df)
    

    由于没有一个ExcelWriter 方法或属性是公开的,因此建议不要使用它们。

    【讨论】:

    • if_sheet_exists 是正确的参数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2019-04-19
    相关资源
    最近更新 更多