Heim > Backend-Entwicklung > Python-Tutorial > Wie teile ich durch Kommas getrennte Zeichenfolgen in einem Pandas-DataFrame in separate Zeilen auf?

Wie teile ich durch Kommas getrennte Zeichenfolgen in einem Pandas-DataFrame in separate Zeilen auf?

Linda Hamilton
Freigeben: 2024-12-25 21:50:14
Original
839 Leute haben es durchsucht

How to Split Comma-Separated Strings in a Pandas DataFrame into Separate Rows?

Durch Kommas getrennte Zeichenfolgeneinträge in einem Pandas-DataFrame aufteilen, um separate Zeilen zu erstellen

Problem:
Wir einen Pandas DataFrame haben, der Zeichenfolgen mit durch Kommas getrennten Werten in einer Spalte enthält. Wir möchten jeden CSV-Eintrag aufteilen und für jeden eindeutigen Wert eine neue Zeile erstellen. Beispielsweise sollte aus „a,b,c“ „a“, „b“, „c“ werden.

Lösung:

Option 1: DataFrame.explode() (Pandas 0.25.0)

Die Methode DataFrame.explode() wurde speziell für diesen Zweck entwickelt. Es ermöglicht uns, eine listenartige Spalte (in diesem Fall unsere durch Kommas getrennten Zeichenfolgen) in einzelne Zeilen aufzuteilen.

In [1]: df.explode('var1')
Out[1]:
  var1  var2 var3
0    a     1   XX
1    b     1   XX
2    c     1   XX
3    d     2   ZZ
4    e     2   ZZ
5    f     2   ZZ
6    x     2   ZZ
7    y     2   ZZ
Nach dem Login kopieren

Option 2: Benutzerdefinierte vektorisierte Funktion

Wenn DataFrame.explode() nicht verfügbar ist oder wir weitere Anpassungen benötigen, können wir unsere eigene vektorisierte Version erstellen Funktion:

import numpy as np

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Convert `lst_cols` to a list if it is a string.
    if isinstance(lst_cols, str):
        lst_cols = [lst_cols]

    # Calculate the lengths of each list in `lst_cols`.
    lens = df[lst_cols[0]].str.len()

    # Create a new index based on the lengths of the lists.
    idx = np.repeat(df.index.values, lens)

    # Create a new DataFrame with the exploded columns.
    exp_df = pd.DataFrame({
        col: np.repeat(df[col].values, lens)
        for col in df.columns.difference(lst_cols)
    }, index=idx).assign(**{
        col: np.concatenate(df.loc[lens > 0, col].values)
        for col in lst_cols
    })

    # Append rows with empty lists if necessary.
    if (lens == 0).any():
        exp_df = exp_df.append(df.loc[lens == 0, df.columns.difference(lst_cols)], sort=False).fillna(fill_value)

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

    return exp_df
Nach dem Login kopieren

Beispielverwendung:

In [2]: explode(df, 'var1')
Out[2]:
  var1  var2 var3
0    a     1   XX
1    b     1   XX
2    c     1   XX
3    d     2   ZZ
4    e     2   ZZ
5    f     2   ZZ
6    x     2   ZZ
7    y     2   ZZ
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennte Zeichenfolgen in einem Pandas-DataFrame in separate Zeilen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage