Maison >développement back-end >Tutoriel Python >Comment désimbriquer une colonne Pandas DataFrame (ou plusieurs colonnes) dans plusieurs lignes ?
Comment dissocier une colonne d'un DataFrame Pandas en plusieurs lignes
L'un des défis de la manipulation de données avec Pandas consiste à gérer les colonnes contenant listes. Lorsque ces colonnes de type liste doivent être divisées en lignes distinctes, le processus est appelé « destination » ou « explosion ».
Méthodes de dissociation Pandas
Méthode 1 : pandas.DataFrame.explode
Pour un DataFrame avec une seule colonne à être désimbriqué, la fonction pandas.DataFrame.explode peut être utilisée. Il prend le nom de la colonne comme argument.
df.explode('B') # dataframe with column 'B' containing lists
Méthode 2 : Utilisation du constructeur Repeat et DataFrame
Cette méthode combine la répétition et le constructeur DataFrame. Il répète les valeurs de la colonne en fonction de la longueur des listes, puis les concatène.
df = pd.DataFrame({'A': df.A.repeat(df.B.str.len()), 'B': np.concatenate(df.B.values)})
Méthode 3 : recréer la liste
Recréer la list implique de convertir l'ancienne colonne en une liste de tuples contenant la valeur de la colonne et chaque élément de la list.
pd.DataFrame([[x] + [z] for x, y in df.values for z in y], columns=df.columns)
Méthode 4 : Utiliser Reindex
Reindex crée un nouveau DataFrame avec des indices répétés pour les éléments de la liste. Les éléments concaténés sont ensuite attribués à la colonne.
df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
Généralisation à plusieurs colonnes
Pour dissocier plusieurs colonnes, une fonction personnalisée peut être définie. Il faut le DataFrame et une liste de noms de colonnes pour exploser.
def unnesting(df, explode): idx = df.index.repeat(df[explode[0]].str.len()) df1 = pd.concat([ pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1) df1.index = idx return df1.join(df.drop(explode, 1), how='left')
Décoration horizontale
Pour dissocier horizontalement, la méthode add_prefix peut être utilisée pour créer une série de nouvelles colonnes.
df.join(pd.DataFrame(df.B.tolist(), index=df.index).add_prefix('B_'))
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!