Pandas DataFrames sind ein Eckpfeiler der Datenmanipulation in Python. Während Pandas bei vektorisierten Operationen glänzt, gibt es Situationen, in denen eine zeilenweise Verarbeitung notwendig ist. Dieser Artikel untersucht die effizientesten Methoden zur Iteration über DataFrame-Zeilen und hebt deren Stärken und Schwächen hervor.
Inhaltsverzeichnis
iterrows()
: Ein Zeilen-Iteratoritertuples()
: Optimierte Zeileniterationapply()
: Funktionsanwendung für zeilenweise Operationen- Wann Iteration vermieden werden sollte
iterrows()
: Ein Zeilen-Iterator
iterrows()
ist eine unkomplizierte Methode, die jede Zeile als (Index, Series)-Paar liefert. Obwohl für einfache Aufgaben praktisch, ist sie aufgrund des Overheads der Erstellung einer Series für jede Zeile im Allgemeinen weniger effizient als andere Optionen für größere DataFrames.
import pandas as pd
data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
for index, row in df.iterrows():
print(f"Index: {index}, Row: {row}")
itertuples()
: Optimierte Zeileniteration
Für eine verbesserte Performance, insbesondere bei großen Datensätzen, wird itertuples()
empfohlen. Es liefert jede Zeile als namedtuple und bietet so einen schnelleren Zugriff auf Spalten nach Namen. Dies vermeidet den Series-Erstellungs-Overhead von iterrows()
.
import pandas as pd
data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
for row in df.itertuples():
print(f"Col1: {row.col1}, Col2: {row.col2}")
apply()
: Funktionsanwendung für zeilenweise Operationen
apply()
mit axis=1
ist ein leistungsstarkes Werkzeug zum Anwenden einer Funktion auf jede Zeile. Es ist oft der effizienteste und pythonischste Ansatz für zeilenweise Operationen, die als Funktion ausgedrückt werden können.
import pandas as pd
data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
def process_row(row):
return row['col1'] * 2 + row['col2']
df['result'] = df.apply(process_row, axis=1)
print(df)
Wann Iteration vermieden werden sollte
Bevor Sie auf zeilenweise Iteration zurückgreifen, überlegen Sie, ob Ihre Aufgabe mit vektorisierten Operationen erledigt werden kann. Die Stärke von Pandas liegt in seiner Fähigkeit, Operationen gleichzeitig auf ganze Spalten durchzuführen, wodurch die Leistung erheblich verbessert wird. Nur wenn eine Vektorisierung unmöglich oder unpraktisch ist, sollten Sie iterative Ansätze in Betracht ziehen und dabei itertuples()
oder apply()
für die Effizienz priorisieren.