HOWTO · Pandas
Bestimmen Sie die Länge der Liste im Datenrahmen von Python Pandas
In diesem Artikel erfahren Sie, wie Sie die Länge der Listen in einer Pandas-DataFrame-Spalte bestimmen. Wenden Sie Pythons eingebaute Funktion `len()` mit `Series.map()` oder `Series.apply()` auf jede Liste an und weisen Sie die Ergebnisse einer neuen Spalte zu.
Auf dieser Seite
Pythons eingebaute Funktion len() zählt die Elemente jeder Liste in einer DataFrame-Spalte. Wenden Sie sie mit map() oder apply() auf die Series dieser Spalte an, um für jede Zeile eine Anzahl zu erhalten, und weisen Sie diese anschließend einer neuen Spalte zu. So werden die Listeninhalte gezählt, nicht die Zeilen oder Spalten des DataFrame.
Einen DataFrame mit einer listenwertigen Spalte erstellen
Ein DataFrame kann Python-Listen in seinen Zellen enthalten. Eine Spalte Lists könnte zum Beispiel [1, 2, 3], [4, 5] und [6] enthalten. Jede Zeile enthält ihre eigene Liste; die Anzahl für eine Zeile richtet sich daher nach dem Wert in dieser Zeile. Im folgenden Beispiel heißt die Spalte Lists und die Ergebnisspalte Length. Ersetzen Sie die Namen passend zu Ihrem DataFrame.
Listenlängen mit Series.map(len) berechnen
Rufen Sie map(len) für die Series auf, die Sie aus der listenwertigen Spalte ausgewählt haben, und weisen Sie die resultierende Series anschließend dem DataFrame zu. map() wendet die übergebene Funktion auf jeden Wert an, sodass an jedem zugehörigen Zeilenindex eine Anzahl steht.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pandas as pd
df = pd.DataFrame({"Lists": [[1, 2, 3], [4, 5], [6], [7, 8, 9, 10]]})
df["Length"] = df["Lists"].map(len)
print(df)
Lists Length
0 [1, 2, 3] 3
1 [4, 5] 2
2 [6] 1
3 [7, 8, 9, 10] 4
Die Werte in Length entsprechen der Anzahl der Elemente in den jeweiligen Listen: 3, 2, 1 und 4. Für Ihre Daten wählen Sie anstelle von Lists die Spalte mit den Listen aus und verwenden anstelle von Length den gewünschten Namen für die Ergebnisspalte. Bei der Zuweisung werden die abgebildeten Werte anhand des Series-Index zugeordnet.
Als Alternative Series.apply(len) verwenden
Für dieselbe Series-Operation kann apply() die eingebaute Funktion ebenfalls auf jede Liste anwenden. Mit dem DataFrame aus dem vorherigen Beispiel lautet die entsprechende Zuweisung df["Length"] = df["Lists"].apply(len). Für diese Listenwerte ergibt das dieselben Anzahlen. Wählen Sie die Form, die besser zum umgebenden Code passt; ein Geschwindigkeitsvorteil wird hier nicht behauptet. Series.map() ist speziell eine Zuordnungsoperation für Series-Werte, während apply() auch für DataFrames mit achsenbezogenem Verhalten verfügbar ist. Achten Sie daher darauf, auf welchem Objekt Sie die Methode aufrufen.
Leere und nicht listenartige Werte behandeln
Eine leere Liste hat die Länge null, daher gibt len([]) den Wert 0 zurück. Dieser Wert lässt sich mit derselben Zuordnungsoperation verarbeiten. len() kann jedoch nicht uneingeschränkt angewendet werden, wenn die Spalte auch None, NaN oder skalare Werte wie Ganzzahlen enthält. Für diese Werte gibt es keine Listenlänge; ein direkter Aufruf kann einen TypeError auslösen. Legen Sie vor dem Zählen fest, wie solche Werte behandelt werden sollen.
Soll jeder Wert, der keine Liste ist, als null zählen, verwenden Sie df["Lists"].map(lambda value: len(value) if isinstance(value, list) else 0). Der Lambda-Ausdruck gibt für jede Liste ihre Länge zurück und weist jedem Nicht-Listenwert den Wert null zu; er wandelt diese Werte nicht in leere Listen um. Verwenden Sie diese Regel nur, wenn null für alle Eingaben, die keine Listen sind, die gewünschte Anzahl ist. Sind auch andere iterierbare Typen wie Tupel oder Zeichenketten zulässig, legen Sie die erlaubten Typen ausdrücklich fest und prüfen Sie sie entsprechend; len() zählt auch deren Elemente beziehungsweise Zeichen. Die Eingaberegel sollte zur Bedeutung der Spalte Length passen.