Heim > Backend-Entwicklung > Python-Tutorial > Wie entschachtele ich Listen enthaltende Spalten in Pandas DataFrames?

Wie entschachtele ich Listen enthaltende Spalten in Pandas DataFrames?

Barbara Streisand
Freigeben: 2024-12-20 22:58:14
Original
899 Leute haben es durchsucht

How to Unnest List-Containing Columns in Pandas DataFrames?

So entschachteln (explodieren) Sie eine Spalte in einem Pandas-DataFrame in mehrere Zeilen

In Pandas kann es zu Situationen kommen, in denen eine Spalte enthält Listen oder Objekte als Elemente. Um eine solche Spalte in einzelne Zeilen umzuwandeln, ist ein Prozess erforderlich, der als „Unnesting“ oder „Exploding“ bezeichnet wird. Dadurch können Sie Daten effektiver visualisieren und analysieren.

Problem:

Stellen Sie sich einen DataFrame vor, bei dem eine der Spalten „B“ Listen enthält:

df = pd.DataFrame({'A': [1, 2], 'B': [[1, 2], [1, 2]]})

   A       B
0  1  [1, 2]
1  2  [1, 2]
Nach dem Login kopieren

Erwartete Ausgabe:

Die gewünschte Ausgabe ist ein DataFrame, in dem jedes Element von die Spalte „B“ wird als separate Zeile dargestellt:

   A  B
0  1  1
1  1  2
3  2  1
4  2  2
Nach dem Login kopieren

Lösung:

Methode 1: Explosionsfunktion

Ab Pandas-Version 0.25 können Sie die Funktion pandas.DataFrame.explode zum Aufheben der Verschachtelung verwenden. Diese Funktion löst bestimmte Spalten effizient auf und erstellt neue Zeilen für jedes Listenelement.

df.explode('B')

   A  B
0  1  1
1  1  2
0  2  1
1  2  2
Nach dem Login kopieren

Methode 2: Apply pd.Series

Ein anderer Ansatz besteht darin, das Apply zu kombinieren Funktion mit pd.Series. Diese Methode verarbeitet jede Zeile der Spalte „B“ und teilt ihre Elemente in separate Serienobjekte auf.

df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
Nach dem Login kopieren

Methode 3: DataFrame-Konstruktor

Alternativ können Sie Verwenden Sie den DataFrame-Konstruktor, um die Daten umzuformen. Dazu müssen die Zeilenindizes wiederholt werden, um sie an die Anzahl der Elemente in den Listen anzupassen, und sie in einer einzigen Spalte verkettet werden.

df = pd.DataFrame({'A':df.A.repeat(df.B.str.len()), 'B':np.concatenate(df.B.values)})
Nach dem Login kopieren

Methode 4: Neu indizieren oder lokalisieren

Mit reindex oder loc können Sie den DataFrame erweitern, um die aufgelösten Werte aufzunehmen. Füllen Sie die fehlenden Werte mit den Elementen aus der Spalte „B“.

df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
Nach dem Login kopieren

Methode 5: Listenverständnis

Eine prägnante Methode besteht darin, eine Liste von Listen mit zu erstellen Listenverständnis und anschließende Konvertierung in einen DataFrame.

pd.DataFrame([[x] + [z] for x, y in df.values for z in y],columns=df.columns)
Nach dem Login kopieren

Methode 6: Numpy

Für leistungsintensive Szenarien bietet Numpy vektorisierte Operationen. Diese Methode formt die Daten mit np.dstack um und erstellt einen neuen DataFrame.

newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values)))
pd.DataFrame(data=newvalues[0],columns=df.columns)
Nach dem Login kopieren

Methode 7: Itertools

Mit dem Paket itertools können Sie iterieren Elemente und kombinieren sie zu etwas Neuem DataFrame.

from itertools import cycle, chain
l=df.values.tolist()
l1=[list(zip([x[0]], cycle(x[1])) if len([x[0]]) > len(x[1]) else list(zip(cycle([x[0]]), x[1]))) for x in l]
pd.DataFrame(list(chain.from_iterable(l1)),columns=df.columns)
Nach dem Login kopieren

Verallgemeinerung auf mehrere Spalten:

Um diese Methoden auf mehrere Spalten zu erweitern, können Sie eine benutzerdefinierte Funktion definieren, die die Spaltennamen als Eingabe und verwendet führt den Aufhebungsvorgang aus.

def unnesting(df, explode):
    idx = df.index.repeat(df[explode[0]].str.len())
    df1 = pd.concat([pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
    df1.index = idx

    return df1.join(df.drop(explode, 1), how='left')
Nach dem Login kopieren

Spaltenweise Entschachteln:

Wenn Sie horizontal „entschachteln“ möchten, also Elemente in einer Reihe erweitern möchten, können Sie den DataFrame-Konstruktor verwenden.

df.join(pd.DataFrame(df.B.tolist(),index=df.index).add_prefix('B_'))
Nach dem Login kopieren

Fazit:

Diese Methoden bieten flexible Optionen zum Aufheben der Verschachtelung von Daten in Pandas DataFrames. Wählen Sie den Ansatz, der Ihren Leistungs- und Lesbarkeitsanforderungen am besten entspricht.

Das obige ist der detaillierte Inhalt vonWie entschachtele ich Listen enthaltende Spalten in Pandas DataFrames?. 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