2017-06-05 1 views
0

J'essaye de créer un dataframe pandas à partir d'un ordereddict pour préserver l'ordre des valeurs. Mais pour une raison quelconque, après la création de la base de données, les champs sont de nouveau foirés.Générer un dataframe pandas à partir de ordereddict?

Voici la liste des ordereddicts:

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

Maintenant, comment dois-je créer une trame de données de pandas géants de ces? Ce que je cherche quelque chose comme ça (la chose importante est le key_a et l'ordre du nom de la colonne key_b etc):

key_a key_b 
0 value_a value_b 
1 value_c value_d 

J'ai essayé:

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

Ne hésitez pas à poser des questions supplémentaires.

+0

'pd.DataFrame (orderedDictList)' fonctionne très bien pour moi – MaxU

+0

'.from_dict' excepte le dictionnaire doit être sous la forme '{'col_a': [val_1, val_2], 'col_b': [val_3, val_4]}' sauf si vous passez 'orient = index'. – DeepSpace

Répondre

3

Après this réponse, vous devez spécifier explicitement votre commande de colonne:

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

Bien sûr, vous devez d'abord vous assurer que vous avez un dictionnaire ordonné.

0

Vous pouvez faire quelque chose comme ceci à l'aide de Countercollections Module:

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) 

Sortie:

 key_b key_a 
0 value_b value_a 
1 value_d value_c