Write dictionary with numpy arrays to .csv

后端 未结 1 1480
抹茶落季
抹茶落季 2021-01-23 00:12

I want to write resultfiles to .csv. I prepared a simple test example.

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

data[\'set1\'] = {\'a\': tes         


        
相关标签:
1条回答
  • 2021-01-23 01:00

    You can collect headers and rows in separate data structures and then use csv module to write everything to an excel sheet. Also, the data dict needs to be converted to OrderedDict to maintain order of sequence.

    SourceCode

    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

    0 讨论(0)
提交回复
热议问题