web-dev-qa-db-fra.com

Copiez pandas dataframe vers Excel en utilisant openpyxl

J'ai un formatage compliqué enregistré dans un fichier de modèle dans lequel je dois enregistrer des données à partir d'un cadre de données pandas. Le problème est lorsque j'utilise pd.to_Excel pour enregistrer dans cette feuille de calcul, pandas écrase la mise en forme. Existe-t-il un moyen de "coller des valeurs" du df dans la feuille de calcul? J'utilise pandas 0.17

import openpyxl
import pandas as pd
wb= openpyxl.load_workbook('H:/template.xlsx')
sheet = wb.get_sheet_by_name('spam')
sheet.title = 'df data'
wb.save('H:/df_out.xlsx')

xlr = pd.ExcelWriter('df_out.xlsx')
df.to_Excel(xlr, 'df data')
xlr.save()
12
blitz009

openpyxl 2.4 est livré avec un utilitaire pour convertir Pandas Dataframes en quelque chose avec lequel openpyxl peut travailler directement. Le code ressemblerait un peu à ceci:

from openpyxl.utils.dataframe import dataframe_to_rows
rows = dataframe_to_rows(df)

for r_idx, row in enumerate(rows, 1):
    for c_idx, value in enumerate(row, 1):
         ws.cell(row=r_idx, column=c_idx, value=value)

Vous pouvez ajuster le début de l'énumération pour placer les cellules là où vous en avez besoin.

Voir documentation openpyxl pour plus d'informations.

17
Charlie Clark

Voici la solution pour vous en utilisant clipboard :

import openpyxl
import pandas as pd
import clipboard as clp

#Copy dataframe to clipboard
df.to_clipboard()
#paste the clipboard to a valirable
cells = clp.paste()
#split text in varialble as rows and columns
cells = [x.split() for x in cells.split('\n')]

#Open the work book
wb= openpyxl.load_workbook('H:/template.xlsx')
#Get the Sheet
sheet = wb.get_sheet_by_name('spam')
sheet.title = 'df data'
#Paste clipboard values to the sheet
for i, r in Zip(range(1,len(cells)), cells):
    for j, c in Zip(range(1,len(r)), r):
        sheet.cell(row = i, column = j).value = c
#Save the workbook
wb.save('H:/df_out.xlsx')
1
Abbas