группа панд с суммой () на большой CSV-файл?
У меня есть большой файл (19 ГБ или около того), который я хочу загрузить в память, чтобы выполнить агрегирование по некоторым столбцам.
файл выглядит так:
id, col1, col2, col3,
1 , 12 , 15 , 13
2 , 18 , 15 , 13
3 , 14 , 15 , 13
3 , 14 , 185 , 213
обратите внимание, что я использую столбцы (id, col1) для агрегации после загрузки в фрейм данных, также обратите внимание, что эти ключи могут повторяться несколько раз подряд, например:
3 , 14 , 15 , 13
3 , 14 , 185 , 213
Для небольшого файла, следующий скрипт может сделать работу
import pandas as pd
data = pd.read_csv("data_file", delimiter=",")
data = data.reset_index(drop=True).groupby(["id","col1"], as_index=False).sum()
Однако для большого файла мне нужно использовать chunksize при чтении файла csv, чтобы ограничить количество строк, загружаемых в память:
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()
В последнем случае возникнет проблема, если строки, в которых (id, col1) похожи, разделены на разные файлы. Как я могу справиться с этим?
РЕДАКТИРОВАТЬ
Как указывает @EdChum, существует потенциальный обходной путь, то естьне просто добавить результаты groupby к новому csv, прочитать их обратно и выполнить агрегацию снова, пока размер df не изменится.
Это, однако, имеет худший сценарий, который не обрабатывается, а именно:
когда все файлы (или достаточно много файлов, которые память не может обработать) имеют одинаковое проблемное сходство (id, col1) в конце. Это заставит систему вернуть MemoryError