J'essaie de créer une base de données Pandas à partir d'un ordre de vente afin de préserver l'ordre des valeurs. Mais pour une raison quelconque, après la création du cadre de données, les champs sont à nouveau perturbés.
Voici la liste des ordonnances:
[OrderedDict([
('key_a',
'value_a'),
('key_b',
'value_b'),
]),
OrderedDict([
('key_a',
'value_c'),
('key_b',
'value_d'),
])
]
Maintenant, comment dois-je créer un DataFrame pandas à partir de ceux-ci? Ce que je recherche, c’est quelque chose comme ça (l’important est l’ordre des noms de colonnes key_a et 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)
N'hésitez pas à poser des questions supplémentaires.
Après this answer, vous devez spécifier explicitement votre ordre de colonne:
df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys())
Bien sûr, vous devez d’abord vous assurer que vous avez un dictionnaire commandé.
Vous pouvez faire quelque chose comme ceci en utilisant Counter
du module collections
:
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