在不影响其他 sheet 的情况下,用 pandas 数据框覆盖 excel sheet
Overwrite an excel sheet with pandas dataframe without affecting other sheets
我想用 Pandas 数据框覆盖 excel 文件中现有的 sheet,但不希望对同一文件的其他 sheet 进行任何更改.这是如何实现的。
我尝试了下面的代码,但不是覆盖,而是将数据附加到 '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()
除此之外我没有找到任何其他选项,这对您来说是一个快速的解决方案。
我相信仍然没有直接的方法可以做到这一点,如果我错了请纠正我。这就是我们需要使用这种逻辑方式的原因。
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)
如果您觉得这有帮助,请告诉我,如果您需要任何其他更好的解决方案,请忽略。
因为 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
个方法或属性中的 none 个是 public,因此建议不要使用它们。
类似于 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)
我想用 Pandas 数据框覆盖 excel 文件中现有的 sheet,但不希望对同一文件的其他 sheet 进行任何更改.这是如何实现的。 我尝试了下面的代码,但不是覆盖,而是将数据附加到 '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()
除此之外我没有找到任何其他选项,这对您来说是一个快速的解决方案。
我相信仍然没有直接的方法可以做到这一点,如果我错了请纠正我。这就是我们需要使用这种逻辑方式的原因。
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)
如果您觉得这有帮助,请告诉我,如果您需要任何其他更好的解决方案,请忽略。
因为 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
个方法或属性中的 none 个是 public,因此建议不要使用它们。
类似于 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)