Python—dict中列表的值作为csv文件中的多列
我有一个嵌套的dict,它有一个内部列表作为一个值,我试图在多个列名下推断到一个csv文件。格言如下:Python—dict中列表的值作为csv文件中的多列,python,list,csv,dictionary,Python,List,Csv,Dictionary,我有一个嵌套的dict,它有一个内部列表作为一个值,我试图在多个列名下推断到一个csv文件。格言如下: {'signal': {'chest': {'ACC': array([[ 0.95539999, -0.222 , -0.55799997], [ 0.92579997, -0.2216 , -0.55379999], [ 0.90820003, -0.21960002, -0.53920001], ..., [ 0.87
{'signal': {'chest': {'ACC': array([[ 0.95539999, -0.222 , -0.55799997],
[ 0.92579997, -0.2216 , -0.55379999],
[ 0.90820003, -0.21960002, -0.53920001],
...,
[ 0.87179995, -0.12379998, -0.30419999],
[ 0.87300003, -0.12339997, -0.30260003],
[ 0.87020004, -0.12199998, -0.30220002]]), 'ECG': array([[ 0.02142334],
[ 0.02032471],
[ 0.01652527],
...,
我已经写了一些代码来平铺dict,这样每个标题都是:signal\u cheast\u ACC,signal\u chest\u ECG,等等,尽管很难看
我试图处理每个列表的值,使它们显示在每列下。但是,它在一列中输出所有值,而不是在适当的键下。如何访问数组的每个索引并将其作为csv文件的一行输出,以便每个键(列标题)都有相应的值列表
#!/usr/bin/env python2
import sys
import numpy
import cPickle
import pandas as pd
import csv
import itertools
#numpy.set_printoptions(threshold=sys.maxsize)
with (open('S2.pkl', 'rb')) as openfile:
data = cPickle.load(openfile)
for key, value in data['signal'].items():
data['signal_{}'.format(key)] = value
del data['signal']
for key, value in data['signal_wrist'].items():
data['signal_wrist_{}'.format(key)] = value
del data['signal_wrist']
for key, value in data['signal_chest'].items():
data['signal_chest_{}'.format(key)] = value
del data['signal_chest']
keys = sorted(data.keys())
with open('out-testx.csv', 'wb') as csv_file:
w = csv.writer(csv_file, delimiter = "\t")
w.writerow(keys)
for key in keys:
for item in data[key]:
w.writerow([item])
输出示例:
signal_chest_ACC signal_chest_ECG ...
[ 0.95539999, -0.222 , -0.55799997]
[ 0.92579997, -0.2216 , -0.55379999]
[ 0.90820003, -0.21960002, -0.53920001]
...
[ 0.02142334]
[ 0.02142334]
[ 0.01652527]
...
期望输出:
signal_chest_ACC signal_chest_ECG ...
[ 0.95539999, -0.222 , -0.55799997] [ 0.02142334]
[ 0.92579997, -0.2216 , -0.55379999] [ 0.02142334]
[ 0.90820003, -0.21960002, -0.53920001] [ 0.01652527]
...
据我所知,您希望将不同ECG和ACC测量的嵌套字典转换为一个平面csv表。ACC、ECG测量值按相应值的顺序排列。我从您提供的代码开始,做了一些更改,并加入了解释每个步骤的注释 请注意,您可以通过许多不同的方式获得相同的结果,但我选择了与您开始使用的方法相近的方法,并且我没有尝试编写高效的代码或pythonic代码来确保答案清晰。我想说的是,有更好更干净的方法来获得同样的结果,但我在这里试图最大限度地提高清晰度
import cPickle
import csv
def fun():
#load the pickled file and set the value to data
with (open('S2.pkl', 'rb')) as openfile:
data = cPickle.load(openfile)
#flatten the nested dictionary (depth 2)
for key0, value0 in data.items():
for key1, value1 in data[key0].items():
data['{}_{}'.format(key0, key1)] = value1
for key2, value2 in data['{}_{}'.format(key0, key1)].items():
data['{}_{}_{}'.format(key0, key1, key2)]=value2
del data['{}_{}'.format(key0, key1)]
del data[key0]
#extract the flatten keys (useful for the csv)
keys = sorted(data.keys())
#Turn the dictionary into a table
rows = []
firstKey = keys[0]
for index, value in enumerate(data[firstKey]):
row = []
for key in keys:
row.append(data[key][index])
rows.append(row)
#Export datRows as csv
with open('out-testx.csv', 'wb') as csv_file:
w = csv.writer(csv_file, delimiter = "\t", lineterminator="\n")
w.writerow(keys)
for row in rows:
w.writerow(row)
if __name__=='__main__':
fun()
运行代码(数据可用)会导致:
signal_chest_ACC signal_chest_ECG
[0.95539999, -0.222, -0.55799997] [0.02142334]
[0.92579997, -0.2216, -0.55379999] [0.02032471]
[0.90820003, -0.21960002, -0.53920001] [0.02032471]
[0.87179995, -0.12379998, -0.30419999] [0.02032471]
[0.87300003, -0.12339997, -0.30260003] [0.02032471]
[0.87020004, -0.12199998, -0.30220002] [0.01652527]
祝您分析数据时好运…您提供的代码在最后一行代码中有明显错误,但我认为这不是您的问题。请提供一个测试输入数据文件,以及您正在使用的代码…@Ouss修复了拼写错误,我认为您可能是有意的,并上传了我正在使用的完整代码。输入数据文件很大,但它看起来像我上面显示的代码片段。。。这不仅仅是一个打字错误。。。ECG、ACC内的值将不会导出。。。[项目]将包含[ACC]和[ECG],而不是您想要的值。。。在此处或此处添加一些print()函数,以便可以找到逻辑错误。。。或者使用IDE调试代码。。。或者使用像Jupyter这样的工具,在那里你可以通过line@Ouss我已经添加了一个示例输出到它当前的样子。字面上不包含[ACC]和[ECG],但除了一列中的所有值之外,我想要的值与所需的HeaderOK不对应。我懂了。因此,原始文件中ACC数组的第一个元素与ECG数组的第一个元素相对应,它们应该在最终csv文件的同一行中导出?谢谢,尽管我认为键没有完全匹配的输出,因为我一直在获取索引器:行上的字符串索引超出范围。append(data[key][index]).我提供的代码与您提供的描述和数据一致。如果您提供的数据不能代表您手头的问题,那么我无法进一步帮助您。请共享数据文件或其中具有代表性的部分。。。