Pandas Groupby mit sum () auf große CSV-Datei?

Ich habe eine große Datei (ca. 19 GB), die ich in den Speicher laden möchte, um eine Aggregation über einige Spalten durchzuführen.

die Datei sieht so aus:

id, col1, col2, col3, 
1 ,  12 , 15 , 13 
2 ,  18 , 15 , 13 
3 ,  14 , 15 , 13 
3 ,  14 , 185 , 213 

beachten Sie, dass ich die Spalten (id, col1) für die Aggregation nach dem Laden in den Datenrahmen verwende. Beachten Sie auch, dass diese Schlüssel möglicherweise einige Male nacheinander wiederholt werden, z. B .:

3 ,  14 , 15 , 13 
3 ,  14 , 185 , 213 

Für eine kleine Datei kann das folgende Skript den Job erledigen

import pandas as pd
data = pd.read_csv("data_file", delimiter=",")
data = data.reset_index(drop=True).groupby(["id","col1"], as_index=False).sum()

Bei einer großen Datei muss ich jedoch beim Lesen der CSV-Datei chunksize verwenden, um die Anzahl der in den Speicher geladenen Zeilen zu begrenzen:

import pandas as pd
data = pd.read_csv("data_file", delimiter=",", chunksize=1000000)
data = data.reset_index(drop=True).groupby(["id","col1"], as_index=False).sum()

Im letzteren Fall tritt ein Problem auf, wenn die Zeilen, in denen (id, col1) ähnlich sind, in verschiedene Dateien aufgeteilt werden. Wie kann ich damit umgehen?

BEARBEITE

Wie von @EdChum hervorgehoben, gibt es eine mögliche Problemumgehung:nicht einfach die groupby-Ergebnisse an eine neue csv anhängen und diese wieder einlesen und die Aggregation erneut durchführen, bis sich die df-Größe nicht mehr ändert.

Dies ist jedoch ein Worst-Case-Szenario, das nicht behandelt wird, dh:

wenn alle Dateien (oder genügend viele Dateien, mit denen der Speicher nicht umgehen kann) am Ende dasselbe Problem haben (id, col1). Dies bewirkt, dass das System einen MemoryError @ zurückgib

Antworten auf die Frage(4)

Ihre Antwort auf die Frage