Comment exporter une liste de DataFrames dans un seul tableur Excel?
Les documents pour to_Excel
state:
Remarques
Si vous transmettez un objet ExcelWriter existant, la feuille sera ajoutée au classeur existant. Cela peut être utilisé pour enregistrer différents DataFrames dans un classeur
writer = ExcelWriter('output.xlsx')
df1.to_Excel(writer, 'sheet1')
df2.to_Excel(writer, 'sheet2')
writer.save()
Après cela, j'ai pensé que je pourrais écrire une fonction qui enregistre une liste de DataFrames dans une feuille de calcul comme suit:
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()
Cependant (avec une liste de deux petits DataFrames, chacun d'eux pouvant enregistrer to_Excel
individuellement), une exception est déclenchée (Edit: traceback supprimé) :
AttributeError: 'str' object has no attribute 'worksheets'
Je n’appelle probablement pas ExcelWriter
correctement, comment devrais-je être pour faire cela?
Vous devriez utiliser des pandas appartenant à la classe ExcelWriter
:
from pandas import ExcelWriter
# from pandas.io.parsers import ExcelWriter
Ensuite, la fonction save_xls
fonctionne comme prévu:
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()
Au cas où quelqu'un aurait besoin d'un exemple sur la manière de procéder avec un dictionnaire de cadres de données
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()
exemple: save_xls(dict_df = my_dict, path = '~/my_path.xls')