Maison > développement back-end > Tutoriel Python > Comment dissocier les colonnes de liste dans les Pandas DataFrames ?

Comment dissocier les colonnes de liste dans les Pandas DataFrames ?

Patricia Arquette
Libérer: 2024-12-30 19:21:10
original
294 Les gens l'ont consulté

How to Unnest List Columns in Pandas DataFrames?

Dissocier les colonnes avec Pandas

Lorsque vous traitez des DataFrames qui contiennent des colonnes de listes, il peut être utile de "déplier" ces listes en lignes séparées.

Méthode 1 : Utilisation de DataFrame.explode() (Pandas >= 0.25)

Pour une explosion sur une seule colonne, utilisez explosive() directement :

df = pd.DataFrame({'A': [1, 2], 'B': [[1, 2], [1, 2]]})

df_exploded = df.explode('B')
Copier après la connexion

Méthode 2 : appliquer la série

df_exploded = df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
Copier après la connexion

Méthode 3 : répéter le DataFrame

df_exploded = pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)})
Copier après la connexion

Méthode 4 : Réindexer/Loc

df_exploded = df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
Copier après la connexion

Méthode 5 : ChainMap

from collections import ChainMap
d = dict(ChainMap(*map(dict.fromkeys, df['B'], df['A'])))
df_exploded = pd.DataFrame(list(d.items()),columns=df.columns[::-1])
Copier après la connexion

Méthode 6 : Numpy

newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values)))
df_exploded = pd.DataFrame(data=newvalues[0],columns=df.columns)
Copier après la connexion

Méthode 7 : Itérateurs

from itertools import cycle,chain
l=df.values.tolist()
l1=[list(zip([x[0]], cycle(x[1])) if len([x[0]]) > len(x[1]) else list(zip(cycle([x[0]]), x[1]))) for x in l]
df_exploded = pd.DataFrame(list(chain.from_iterable(l1)),columns=df.columns)
Copier après la connexion

Généralisation à plusieurs colonnes

Pour généraliser ce qui précède méthodes pour plusieurs colonnes, utilisez la fonction suivante :

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')
Copier après la connexion

Column-Wise Unnesting

Pour dissocier horizontalement, modifiez la fonction :

def unnesting(df, explode, axis):
    if axis==1:
        # Previous implementation
    else :
        df1 = pd.concat([
                         pd.DataFrame(df[x].tolist(), index=df.index).add_prefix(x) for x in explode], axis=1)
        return df1.join(df.drop(explode, 1), how='left')
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal