Ancienne question, mais je suppose que certaines personnes recherchent toujours cela - alors ...
Je trouve cette méthode agréable car toutes les feuilles de calcul sont chargées dans un dictionnaire de paires de noms de feuilles et de cadres de données, créé par des pandas avec l'option sheetname = None. Il est simple d'ajouter, de supprimer ou de modifier des feuilles de calcul entre la lecture de la feuille de calcul au format dict et sa réécriture à partir du dict. Pour moi, le xlsxwriter fonctionne mieux que openpyxl pour cette tâche particulière en termes de vitesse et de format.
Remarque: les futures versions de pandas (0.21.0+) changeront le paramètre "sheetname" en "sheet_name".
# 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)
Pour l'exemple de la question de 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)