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
Barbara StreisandOriginal
2024-12-20 22:58:14901Durchsuche

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]

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

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

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'})

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)})

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))

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)

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)

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)

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')

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_'))

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!

Stellungnahme:
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