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 ?
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!