Maison >développement back-end >Tutoriel Python >Comment puis-je créer efficacement un DataFrame Pandas à partir d'un dictionnaire imbriqué avec des données hiérarchiques ?

Comment puis-je créer efficacement un DataFrame Pandas à partir d'un dictionnaire imbriqué avec des données hiérarchiques ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-14 10:58:12541parcourir

How Can I Efficiently Create a Pandas DataFrame from a Nested Dictionary with Hierarchical Data?

Construction de DataFrames Pandas à partir d'éléments de dictionnaire imbriqués

Étant donné un dictionnaire imbriqué avec une structure comportant un UserId comme niveau supérieur, des catégories comme deuxième niveau, et divers attributs comme troisième niveau, le but est de créer un DataFrame pandas avec un index hiérarchique. Chaque UserID doit apparaître comme une valeur d'index, tandis que les valeurs de catégorie et d'attribut forment les noms de colonnes.

Les tentatives conventionnelles de construction d'un DataFrame à partir d'un tel dictionnaire peuvent entraîner une affectation incorrecte d'index et de colonnes. Pour résoudre ce problème, envisagez les approches suivantes :

1. Remodeler le dictionnaire :

Une solution consiste à remodeler le dictionnaire dans un format où les clés sont des tuples représentant le MultiIndex souhaité. Cela permet l'utilisation de pd.DataFrame.from_dict avec orient='index':

user_dict = {
    12: {'Category 1': {'att_1': 1, 'att_2': 'whatever'},
         'Category 2': {'att_1': 23, 'att_2': 'another'}},
    15: {'Category 1': {'att_1': 10, 'att_2': 'foo'},
         'Category 2': {'att_1': 30, 'att_2': 'bar'}}
}

df = pd.DataFrame.from_dict({(i,j): user_dict[i][j] 
                           for i in user_dict.keys() 
                           for j in user_dict[i].keys()},
                       orient='index')

2. Concaténation de DataFrames :

Alternativement, on peut construire le DataFrame en construisant des dataframes individuels pour chaque catégorie et utilisateur, puis en les concaténant :

user_ids = []
frames = []

for user_id, d in user_dict.iteritems():
    user_ids.append(user_id)
    frames.append(pd.DataFrame.from_dict(d, orient='index'))

df = pd.concat(frames, keys=user_ids)

Les deux approches produisent un DataFrame avec le souhaité index hiérarchique et structure des colonnes :

               att_1     att_2
12 Category 1      1  whatever
   Category 2     23   another
15 Category 1     10       foo
   Category 2     30       bar

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn