web-dev-qa-db-fra.com

Générer un cadre de données pandas à partir de ordereddict?

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.

6
E. Muuli

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é.

11
Adeel Ahmad

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
1
Chiheb Nexus