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

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

Mary-Kate Olsen
Freigeben: 2024-12-24 18:06:15
Original
267 Leute haben es durchsucht

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

Pandas-Datenrahmen-Zeichenfolgeneintrag aufteilen (explodieren), um Zeilen zu trennen

Problem:
Manipulation eines Pandas-Datenrahmens Das Ziel besteht darin, jedes CSV-Feld in einzelne Zeilen aufzuteilen und dabei die Werte beizubehalten, die eine Spalte mit durch Kommas getrennten Werten enthalten ursprüngliche Datenstruktur.

Lösung:

Die empfohlene Lösung besteht darin, die in Pandas 0.25 eingeführte Methode Pandas Series.explode() oder DataFrame.explode() zu nutzen. 0 und wurde in Pandas 1.3.0 erweitert, um die Explosion mehrerer Spalten zu unterstützen.

Um eine einzelne Spalte aufzulösen, verwenden Sie Series.explode():

df.explode('column_name')
Nach dem Login kopieren

Für mehrere Spalten verwenden Sie DataFrame.explode():

df.explode(['column1', 'column2'])
Nach dem Login kopieren

Beispiel:

df = pd.DataFrame({
    'A': [[0, 1, 2], 'foo', [], [3, 4]],
    'B': 1,
    'C': [['a', 'b', 'c'], np.nan, [], ['d', 'e']]
})

df.explode('A')
Nach dem Login kopieren

Ausgabe:

     A  B          C
0    0  1  [a, b, c]
0    1  1  [a, b, c]
0    2  1  [a, b, c]
1  foo  1        NaN
2  NaN  1         []
3    3  1     [d, e]
3    4  1     [d, e]
Nach dem Login kopieren

Für einen allgemeineren Ansatz, der für mehrere Normal- und Listenspalten funktioniert, beachten Sie Folgendes Funktion:

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Ensure `lst_cols` is list-alike
    if lst_cols and not isinstance(lst_cols, (list, tuple, np.ndarray, pd.Series)):
        lst_cols = [lst_cols]

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

    # Preserve original index values
    idx = np.repeat(df.index.values, lens)

    # Create an "exploded" DataFrame
    res = (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 (lens == 0).any():
        res = (res.append(df.loc[lens==0, df.columns.difference(lst_cols)], sort=False)
                  .fillna(fill_value))

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

    return res
Nach dem Login kopieren

Beispiel für die Auflösung einer CSV-ähnlichen Spalte:

df = pd.DataFrame({
    'var1': 'a,b,c d,e,f,x,y'.split(),
    'var2': [1, 2]
})

explode(df.assign(var1=df.var1.str.split(',')), 'var1')
Nach dem Login kopieren

Ausgabe:

  var1  var2
0    a     1
1    b     1
2    c     1
3    d     2
4    e     2
5    f     2
6    x     2
7    y     2
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennte Werte 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