„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich Pandas-DataFrame-String-Einträge in separate Zeilen auflösen (aufteilen)?

Wie kann ich Pandas-DataFrame-String-Einträge in separate Zeilen auflösen (aufteilen)?

Veröffentlicht am 25.12.2024
Durchsuche:833

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

Pandas-DataFrame-Stringeinträge in separate Zeilen auflösen (aufteilen)

In Pandas besteht eine häufige Anforderung darin, durch Kommas getrennte Werte in a aufzuteilen Textzeichenfolgespalte und erstellen Sie für jeden Eintrag eine neue Zeile. Dies kann durch verschiedene Methoden erreicht werden.

Verwenden von Series.explode() oder DataFrame.explode()

Für Pandas-Versionen 0.25.0 und höher ist die Serie. Die Methoden explosion() und DataFrame.explode() bieten eine praktische Möglichkeit, CSV-ähnliche Spalten zu explodieren:

Für einzelne Spalten:

df.explode('column_name')

Für mehrere Spalten:

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

Generic Vectorized Funktion

Ein vielseitigerer vektorisierter Ansatz, der sowohl für normale als auch für Listenspalten funktioniert, wird unten bereitgestellt:

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

Anwendungen

CSV-Spalte:

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

Mehrfachliste Spalten:

explode(df, ['num', 'text'], fill_value='')
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3