【问题标题】:Write dictionary with numpy arrays to .csv将带有 numpy 数组的字典写入 .csv
【发布时间】:2018-03-23 12:33:48
【问题描述】:

我想将结果文件写入 .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}

获得这样的结果文件会很棒:

有没有简单的方法可以推荐?

【问题讨论】:

标签: python csv numpy


【解决方案1】:

您可以在单独的数据结构中收集标题和行,然后使用 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 repetitions 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2012-06-06
    • 2018-09-03
    • 1970-01-01
    • 2018-12-25
    • 2019-07-14
    • 2019-04-09
    • 2015-08-07
    相关资源
    最近更新 更多