Alte Frage, aber ich vermute, einige Leute suchen immer noch danach - also ...
Ich finde diese Methode schön, weil alle Arbeitsblätter in ein Wörterbuch mit Blattnamen- und Datenrahmenpaaren geladen werden, das von Pandas mit der Option Blattname = Keine erstellt wurde. Es ist einfach, Arbeitsblätter zwischen dem Lesen der Tabelle im Diktatformat und dem Zurückschreiben aus dem Diktat hinzuzufügen, zu löschen oder zu ändern. Für mich funktioniert der xlsxwriter in Bezug auf Geschwindigkeit und Format besser als openpyxl für diese spezielle Aufgabe.
Hinweis: Zukünftige Versionen von Pandas (0.21.0+) ändern den Parameter "Blattname" in "Blattname".
# read a single or multi-sheet excel file
# (returns dict of sheetname(s), dataframe(s))
ws_dict = pd.read_excel(excel_file_path,
sheetname=None)
# all worksheets are accessible as dataframes.
# easy to change a worksheet as a dataframe:
mod_df = ws_dict['existing_worksheet']
# do work on mod_df...then reassign
ws_dict['existing_worksheet'] = mod_df
# add a dataframe to the workbook as a new worksheet with
# ws name, df as dict key, value:
ws_dict['new_worksheet'] = some_other_dataframe
# when done, write dictionary back to excel...
# xlsxwriter honors datetime and date formats
# (only included as example)...
with pd.ExcelWriter(excel_file_path,
engine='xlsxwriter',
datetime_format='yyyy-mm-dd',
date_format='yyyy-mm-dd') as writer:
for ws_name, df_sheet in ws_dict.items():
df_sheet.to_excel(writer, sheet_name=ws_name)
Für das Beispiel in der Frage 2013:
ws_dict = pd.read_excel('Masterfile.xlsx',
sheetname=None)
ws_dict['Main'] = data_filtered[['Diff1', 'Diff2']]
with pd.ExcelWriter('Masterfile.xlsx',
engine='xlsxwriter') as writer:
for ws_name, df_sheet in ws_dict.items():
df_sheet.to_excel(writer, sheet_name=ws_name)