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!