Exponentiell langsame Verkettung von DataFrames
Bei der Arbeit mit großen Datensätzen ist es üblich, die Daten zur effizienten Verarbeitung in kleinere Teile zu unterteilen. Das erneute Verketten dieser Blöcke kann jedoch exponentiell langsamer werden, wenn die Anzahl der Blöcke zunimmt.
Ursache der Verlangsamung
Die Verlangsamung wird darauf zurückgeführt, wie pd.concat() umgesetzt wird. Beim Aufruf innerhalb einer Schleife wird für jede Verkettung ein neuer DataFrame erstellt, was zu erheblichen Datenkopien führt. Diese Kopierkosten steigen quadratisch mit der Anzahl der Iterationen, was zu dem beobachteten exponentiellen Anstieg der Verarbeitungszeit führt.
Verlangsamung vermeiden
Diesen Leistungsengpass zu umgehen, ist von entscheidender Bedeutung um den Aufruf von pd.concat() innerhalb einer for-Schleife zu vermeiden. Speichern Sie stattdessen die Blöcke in einer Liste und verketten Sie sie nach der Verarbeitung alle auf einmal:
super_x = [] for i, df_chunk in enumerate(df_list): [x, y] = preprocess_data(df_chunk) super_x.append(x) super_x = pd.concat(super_x, axis=0)
Bei diesem Ansatz erfolgt das Kopieren nur einmal, was die Gesamtverarbeitungszeit erheblich verkürzt.
Das obige ist der detaillierte Inhalt vonWarum ist die Verkettung vieler Pandas-DataFrames exponentiell langsam und wie kann ich dies vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!