Guardar la lista de DataFrames en una hoja de cálculo de Excel de múltiples hojas

¿Cómo puedo exportar una lista de DataFrames en una hoja de cálculo de Excel?
Los documentos para el estado to_excel :

Notas
Si pasa un objeto ExcelWriter existente, la hoja se agregará al libro existente. Esto se puede usar para guardar diferentes DataFrames en un libro de trabajo

writer = ExcelWriter('output.xlsx')
df1.to_excel(writer, 'sheet1')
df2.to_excel(writer, 'sheet2')
writer.save()

Después de esto, pensé que podría escribir una función que guarde una lista de DataFrames en una hoja de cálculo de la siguiente manera:

 from openpyxl.writer.excel import ExcelWriter def save_xls(list_dfs, xls_path): writer = ExcelWriter(xls_path) for n, df in enumerate(list_dfs): df.to_excel(writer,'sheet%s' % n) writer.save() 

Sin embargo (con una lista de dos DataFrames pequeños, cada uno de los cuales puede guardar to_excel individualmente), se to_excel una excepción (Edición: se eliminó el rastreo) :

 AttributeError: 'str' object has no attribute 'worksheets' 

Presumiblemente no estoy llamando a ExcelWriter correctamente, ¿cómo debo estar para hacer esto?

Deberías estar usando la propia clase de ExcelWriter pandas:

 from pandas import ExcelWriter # from pandas.io.parsers import ExcelWriter 

Entonces la función save_xls funciona como se espera:

 def save_xls(list_dfs, xls_path): with ExcelWriter(xls_path) as writer: for n, df in enumerate(list_dfs): df.to_excel(writer,'sheet%s' % n) writer.save() 

En caso de que alguien necesite un ejemplo de cómo hacer esto con un diccionario de marcos de datos:

 from pandas import ExcelWriter def save_xls(dict_df, path): """ Save a dictionary of dataframes to an excel file, with each dataframe as a seperate page """ writer = ExcelWriter(path) for key in dict_df: dict_df[key].to_excel(writer, '%s' % key) writer.save() 

ejemplo: save_xls(dict_df = my_dict, path = '~/my_path.xls')