我有几个字典数据,我想转换为Pandas DataFrame。 但是,由于不必要的密钥' 0' 0 (对我而言),当我将这些dict转换为DataFrame时,我获得了不合需要的DataFrame格式。实际上,这些决定是整个数据的一小部分。
dict1 = {1: {0: [-0.022, -0.017]},
2: {0: [0.269, 0.271]},
3: {0: [0.118, 0.119]},
4: {0: [0.057, 0.061]},
5: {0: [-0.916, -0.924]}}
dict2 = {1: {0: [0.384, 0.398]},
2: {0: [0.485, 0.489]},
3: {0: [0.465, 0.469]},
4: {0: [0.456, 0.468]},
5: {0: [-0.479, -0.482]}}
dict3 = {1: {0: [-0.323, -0.321]},
2: {0: [-0.535, -0.534]},
3: {0: [-0.336, -0.336]},
4: {0: [-0.140, -0.142]},
5: {0: [0.175, 0.177]}}
DataFrame(dict1)
1 2 3 4 \
0 [-0.022, -0.017] [0.269, 0.271] [0.118, 0.119] [0.057, 0.061]
5
0 [-0.916, -0.924]
我使用'解决了这个问题。迭代,结果是我想要获得的结果。
index = [['dict1', 'dict1', 'dict2', 'dict2', 'dict3', 'dict3'], ['A', 'B']*3]
dict = DataFrame(index = index)
for k in dict1.keys():
dict = dict.join(DataFrame(dict1[k][0]+dict2[k][0]+dict3[k][0], index = index, columns = [k]))
print dict
1 2 3 4 5
dict1 A -0.022 0.269 0.118 0.057 -0.916
B -0.017 0.271 0.119 0.061 -0.924
dict2 A 0.384 0.485 0.465 0.456 -0.479
B 0.398 0.489 0.469 0.468 -0.482
dict3 A -0.323 -0.535 -0.336 -0.140 0.175
B -0.321 -0.534 -0.336 -0.142 0.177
然而,当我将这种方法应用于整个数据时,我不能等到操作完成。 我也找到了使用' Panel'的方法。它减少了时间,但还没有满足。
pd.Panel.from_dict(dict1).to_frame()
请告诉我解决这个简单问题的最佳方法。
答案 0 :(得分:0)
您只需修改输入数据并将其转换为DataFrame
:
import itertools
lst = [dict1, dict2, dict3]
dict = {}
for k in dict1:
temp = [l[k].itervalues().next() for l in lst]
dict[k] = list(itertools.chain(*temp))
dict['row'] = ['A','B']*len(lst)
dict['dict'] = ['dict'+str(i+1) for i in range(len(lst)) for n in range(2)]
In [23]: pd.DataFrame(dict)
Out[23]:
1 2 3 4 5 dict row
0 -0.022 0.269 0.118 0.057 -0.916 dict1 A
1 -0.017 0.271 0.119 0.061 -0.924 dict1 B
2 0.384 0.485 0.465 0.456 -0.479 dict2 A
3 0.398 0.489 0.469 0.468 -0.482 dict2 B
4 -0.323 -0.535 -0.336 -0.140 0.175 dict3 A
5 -0.321 -0.534 -0.336 -0.142 0.177 dict3 B
答案 1 :(得分:0)
你应该简单地从嵌套字典中删除一个级别,以使生活更轻松。下面的代码删除了你不必要的部分,并将每个dicts中的数据帧连接在一起。
all_dicts=[dict1,dict2,dict3]
df=pd.concat([pd.DataFrame({k:v[0] for k,v in d.items()}) for d in all_dicts])
df.index=pd.MultiIndex.from_product([['dict1','dict2','dict3'],['A','B']])
>>> df
1 2 3 4 5
dict1 A -0.022 0.269 0.118 0.057 -0.916
B -0.017 0.271 0.119 0.061 -0.924
dict2 A 0.384 0.485 0.465 0.456 -0.479
B 0.398 0.489 0.469 0.468 -0.482
dict3 A -0.323 -0.535 -0.336 -0.140 0.175
B -0.321 -0.534 -0.336 -0.142 0.177