Antigua pregunta, pero supongo que algunas personas todavía buscan esto, así que ...
Encuentro este método agradable porque todas las hojas de trabajo se cargan en un diccionario de pares de nombre de hoja y marco de datos, creado por pandas con la opción sheetname = None. Es simple agregar, eliminar o modificar hojas de trabajo entre leer la hoja de cálculo en el formato dict y escribirla desde el dict. Para mí, xlsxwriter funciona mejor que openpyxl para esta tarea en particular en términos de velocidad y formato.
Nota: las versiones futuras de pandas (0.21.0+) cambiarán el parámetro "sheetname" a "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)
Para el ejemplo de la pregunta 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)