2017-10-11 25 views
1

結果ファイルを.csvに書きたい。私は簡単なテストの例を用意しました。numpy配列の辞書を.csvに書き込む

import numpy as np 
data = {} 
testdata = np.array([1,2,3,4,5]) 

data['set1'] = {'a': testdata, 'b': testdata, 'c': testdata} 
data['set2'] = {'a2': testdata, 'b2': testdata, 'c2': testdata} 
data['set3'] = {'a3': testdata, 'b3': testdata, 'c3': testdata} 

このような結果ファイルを取得するために素晴らしいことだ:

enter image description here

あなたがrecommentできる簡単な方法はありますか?

+0

https://docs.python.org/2/library/csv.html#csv.writerあなたは 'を使用してみましたCSVモジュール?いくつかの例を試してみると分かります。 – sam

答えて

3

ヘッダーと行を別々のデータ構造で収集し、csvモジュールを使用してすべてをExcelシートに書き込むことができます。また、data dictは、順序を維持するためにOrderedDictに変換する必要があります。

ソースコード

import numpy as np 
import csv 
from collections import OrderedDict 
from itertools import chain 


data = {} 

testdata = np.array([1,2,3,4,5]) 
data = OrderedDict(data) 


a = {'a': testdata, 'b': testdata, 'c': testdata} 
b = {'a2': testdata, 'b2': testdata, 'c2': testdata} 
c = {'a3': testdata, 'b3': testdata, 'c3': testdata} 

#covert inner dict to OrderedDict 
data['set1'] = OrderedDict(sorted(a.items(), key=lambda x:x[0])) 
data['set2'] = OrderedDict(sorted(b.items(), key=lambda x:x[0])) 
data['set3'] = OrderedDict(sorted(c.items(), key=lambda x:x[0])) 

#collect second header 
header2 = [data.get(k).keys() for k in data.keys()] 

#get number of repetations for header1 
header1_size = len(header2[0]) 

#get header1 
header1 = sorted((data.keys())*header1_size) 

#flatten list of list of header2 
header2 = list(chain.from_iterable(header2)) 

#get rows from data dict 
rows = zip(*[v2 for k1,v1 in data.items() for k2,v2 in v1.items() ]) 

#write header1,header2 and rows to excel /csv 
with open('csvfile.csv','wb') as ofile:    
    wr = csv.writer(ofile, dialect='excel') 
    wr.writerow(header1) 
    wr.writerow(header2) 
    wr.writerows(rows) 

たcsvfile
enter image description here

関連する問題