用 pandas dataframe 覆盖一个 excel 表而不影响其他表

问题描述 投票:0回答:4

我想用 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
4个回答
17
投票

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

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

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)

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


7
投票

类似于 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)

1
投票

自 Pandas 版本 1.3.0 以来,

on_sheet_exists
ExcelWriter
的一个选项。它可以这样使用:

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
方法或属性都不是公开的,因此建议不要使用它们。


0
投票
pd.ExcelWriter(filename, engine='openpyxl', mode='a') as writer: 
after I using in PYthon 3.8.0,I get this error:
File "C:\Python380\lib\zipfile.py", line 1301, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
© www.soinside.com 2019 - 2024. All rights reserved.