Maison >développement back-end >Tutoriel Python >Comment exploser (diviser) les entrées de chaîne Pandas DataFrame en lignes séparées ?

Comment exploser (diviser) les entrées de chaîne Pandas DataFrame en lignes séparées ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-21 05:26:14653parcourir

How to Explode (Split) Pandas DataFrame String Entries into Separate Rows?

Exploser (diviser) les entrées de chaîne DataFrame Pandas dans des lignes séparées

Dans Pandas, une exigence courante consiste à diviser les valeurs séparées par des virgules dans un colonne de chaîne de texte et créez une nouvelle ligne pour chaque entrée. Ceci peut être réalisé par diverses méthodes.

En utilisant Series.explode() ou DataFrame.explode()

Pour les versions Pandas 0.25.0 et supérieures, la série. Les méthodes éclater() et DataFrame.explode() offrent un moyen pratique d'exploser des colonnes de type CSV :

Pour les colonnes simples colonnes :

df.explode('column_name')

Pour plusieurs colonnes :

df.explode(['column1', 'column2'])  # Pandas 1.3.0+

Fonction vectorisée générique

Une fonction plus une approche vectorisée polyvalente qui fonctionne à la fois pour les colonnes normales et de liste est fournie ci-dessous :

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Convert CSV string columns to list columns
    for col in lst_cols:
        df[col] = df[col].str.split(',')

    # Extract all non-list columns
    idx_cols = df.columns.difference(lst_cols)

    # Calculate list lengths
    lens = df[lst_cols[0]].str.len()

    # Create exploded DataFrame
    result = (pd.DataFrame({
        col: np.repeat(df[col].values, lens)
        for col in idx_cols
    }, index=np.repeat(df.index.values, lens))
        .assign(**{col: np.concatenate(df.loc[lens>0, col].values)
                    for col in lst_cols}))

    # Handle empty list rows
    if (lens == 0).any():
        result = result.append(df.loc[lens==0, idx_cols], sort=False).fillna(fill_value)

    # Revert index order and reset index if requested
    result = result.sort_index()
    if not preserve_index:
        result = result.reset_index(drop=True)

    return result

Applications

Colonne CSV :

df['var1'] = df['var1'].str.split(',')

Colonnes de liste multiples :

explode(df, ['num', 'text'], fill_value='')

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