"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-12-25
Parcourir:543

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

Explorer (diviser) les entrées de chaîne du 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() fournissent un moyen pratique d'exploser des colonnes de type CSV :

Pour un seul colonnes :

df.explode('column_name')

Pour plusieurs colonnes :

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

Générique Vectorisé Function

Une approche vectorisée plus 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='')
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3