web-dev-qa-db-ja.com

openpyxlを使用してpandasデータフレームをExcelにコピーする

pandas dataframeからデータを保存する必要があるテンプレートファイルに保存されたいくつかの複雑な書式設定があります。問題は、pd.to_Excelを使用してこのワークシートに保存するときにpandas書式設定を上書きします。なんらかの方法でdfからワークシートに「値を貼り付ける」方法はありますか?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には、Pandasデータフレームをopenpyxlで直接操作できるものに変換するためのユーティリティが付属しています。コードは次のようになります。

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)

列挙の開始を調整して、セルを必要な場所に配置できます。

詳細は openpyxl documentation を参照してください。

17
Charlie Clark

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