2016-12-04 13 views
0

背景:私の最初のExcel関連スクリプト。 openpyxlの使用。 異なる列の製品に関するさまざまな種類のデータがロードされたExcelシートがあります。辞書をPythonのExcelシートに出力する方法

私の目標は、特定の列(例えば、価格、バーコード、ステータス)から特定の種類のデータを抽出し、それらを固有の製品コードに割り当て、次に新しいExcel文書に製品コード、価格、バーコードおよびステータスを出力することです。

私はデータを抽出し、それを次の辞書のフォーマットを置くことに成功しました:

productData = {'AB123': {'barcode': 123456, 'price': 50, 'status': 'NEW'} 

(私はこれは間違っていることを知っているが)新しいレポートに、この出力を得る上で私の一般的な考え方は、このようなものです:

newReport = openpyxl.Workbook() 
newSheet = newReport.active 
newSheet.title = 'Output' 

newSheet['A1'].value = 'Product Code' 
newSheet['B1'].value = 'Price' 
newSheet['C1'].value = 'Barcode' 
newSheet['D1'].value = 'Status' 

for row in range(2, len(productData) + 1): 
    newSheet['A' + str(row)].value = productData[productCode] 
    newSheet['B' + str(row)].value = productPrice 
    newSheet['C' + str(row)].value = productBarcode 
    newSheet['D' + str(row)].value = productStatus 

newReport.save('ihopethisworks.xlsx') 

実際にデータを出力するには何が必要ですか?

答えて

0

私はそのためにパンダを使用することをお勧めします。それは以下の構文を持っています:

df = pd.read_excel('your_file.xlsx') 
df['Column name you want'].to_excel('new_file.xlsx') 

これ以上のことができます。 Openpyxlはあなたの仕事に適したツールではないかもしれません(Openpyxlはあまりにも一般的です)。

P.S.私はコメントにこれを残すだろうが、彼らのwidomのstackoverflowは、誰も答えを残してコメントすることはできないようにすることを決めた。

+0

は、それは、データが列にあるかどうかをポストから明らかではないです。いずれにしても、openpyxl 'ws ['A']' –

0

データを抽出するために使用するロジックがありませんが、2つのワークシートを並列にループするのに最適なアプローチが使用されていると思われます。ディクショナリを完全に使用せず、新しいワークシートにループを追加するだけで済みます。

擬似コード:

ws1 # source worksheet 
ws2 # new worksheet 

product = [] 
code = ws1[…] # some lookup 
barcode = ws1[…] 
price = ws1[…] 
status = ws1[…] 

ws2.append([code, price, barcode, status]) 
0

パンダは、ここでは、この のために最適に動作しますいくつかの例

import pandas as pd 

#df columns: Date Open High  Low Close  Volume 
#reading data from an excel 
df = pd.read_excel('GOOG-NYSE_SPY.xls') 

#set index to the column of your choice, in this case it would be date 
df.set_index('Date', inplace = True) 

#choosing the columns of your choice for further manipulation 
df = df[['Open', 'Close']] 

#divide two colums to get the % change 
df = (df['Open'] - df['Close'])/df['Close'] * 100 


print(df.head()) 
関連する問題