125 votes

Construire un DataFrame pandas à partir des éléments du dictionnaire imbriqué

Supposons que j'ai un dictionnaire imbriqué 'user_dict' avec une structure :

  • Niveau 1 : UserId (Long Integer)
  • Niveau 2 : Catégorie (Chaîne)
  • Niveau 3 : Attributs assortis (flottants, ints, etc.)

Par exemple, une entrée de ce dictionnaire serait :

user_dict[12] = {
    "Category 1": {"att_1": 1, 
                   "att_2": "whatever"},
    "Category 2": {"att_1": 23, 
                   "att_2": "another"}}

chaque élément dans user_dict a la même structure et user_dict contient un grand nombre d'éléments que je veux introduire dans un DataFrame pandas, en construisant la série à partir des attributs. Dans ce cas, un index hiérarchique serait utile.

Plus précisément, ma question est de savoir s'il existe un moyen d'aider le constructeur de DataFrame à comprendre que la série doit être construite à partir des valeurs du "niveau 3" du dictionnaire ?

Si j'essaie quelque chose comme :

df = pandas.DataFrame(users_summary)

Les éléments du "niveau 1" (les UserId) sont considérés comme des colonnes, ce qui est l'inverse de ce que je veux obtenir (avoir les UserId comme index).

Je sais que je pourrais construire la série après avoir itéré sur les entrées du dictionnaire, mais s'il existe un moyen plus direct, ce serait très utile. Une question similaire serait de savoir s'il est possible de construire un DataFrame pandas à partir d'objets json listés dans un fichier.

3voto

Amogh Joshi Points 185

Pour les autres façons de représenter les données, vous n'avez pas besoin de faire grand-chose. Par exemple, si vous voulez simplement que la clé "externe" soit un index, que la clé "interne" soit des colonnes et que les valeurs soient des valeurs de cellules, cela fera l'affaire :

df = pd.DataFrame.from_dict(user_dict, orient='index')

1voto

El_1988 Points 63

En partant de la réponse vérifiée, pour moi, c'est ce qui a le mieux fonctionné :

ab = pd.concat({k: pd.DataFrame(v).T for k, v in data.items()}, axis=0)
ab.T

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X