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
Libérer: 2024-12-21 05:26:14
original
613 Les gens l'ont consulté

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

Pour plusieurs colonnes :

df.explode(['column1', 'column2'])  # Pandas 1.3.0+
Copier après la connexion

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

Applications

Colonne CSV :

df['var1'] = df['var1'].str.split(',')
Copier après la connexion

Colonnes de liste multiples :

explode(df, ['num', 'text'], fill_value='')
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