2017-06-05 56 views
0

我正在尝试从ordereddict创建一个熊猫数据框来保存这些值的顺序。但是由于某种原因,在创建数据框后,这些字段再次混乱。从ordereddict生成一个熊猫数据框?

这里的ordereddicts名单:

[OrderedDict([ 
    ('key_a', 
    'value_a'), 
    ('key_b', 
    'value_b'), 
]), 
OrderedDict([ 
    ('key_a', 
    'value_c'), 
    ('key_b', 
    'value_d'), 
]) 
] 

现在我应该怎么创建它们的熊猫数据帧?我所寻找的是类似的东西(最重要的事情是KEY_A和key_b等列名顺序):

key_a key_b 
0 value_a value_b 
1 value_c value_d 

我曾尝试:

pd.DataFrame.from_records(orderedDictList) 
pd.DataFrame.from_dict(orderedDictList) 

随意问任何其他问题。

+0

'pd.DataFrame(orderedDictList)'工作得很好,我 – MaxU

+0

'.from_dict'节选除非你通过'orient = index',否则字典的格式为'{'col_a':[val_1,val_2],'col_b':[val_3,val_4]}'。 – DeepSpace

回答

3

this答案,你需要明确指定您的列顺序:

df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys()) 

当然,首先你需要确保你有一个有序字典。

0

可以使用Countercollections模块做这样的事情:

from collections import OrderedDict, Counter 
import pandas as pd 

a = {'key_a': 'value_a', 'key_b':'value_b'} 
b = {'key_a': 'value_c', 'key_b':'value_d'} 

ord_list = [OrderedDict(a), OrderedDict(b)] 

col = Counter() 
for k in ord_list: 
    col.update(k) 


df = pd.DataFrame([k.values() for k in ord_list], columns = col.keys()) 

print(df) 

输出:

 key_b key_a 
0 value_b value_a 
1 value_d value_c