Выбор ответа Middle Чтение и запись данных спрашивают часто обновлено

Файл больше памяти в pandas

Вопрос

CSV на 30 ГБ, памяти 16 ГБ. Нужна сумма amount по region. Что сработает в pandas?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Читать с chunksize и usecols, суммировать куски и сложить итог. Сумма складывается: частичные суммы по кускам можно объединить pd.concat(parts).groupby(level=0).sum(). usecols дополнительно режет память.

Варианты ответа

  1. pd.read_csv(path) и groupby, pandas сам подгрузит файл частями
  2. pd.read_csv(path, low_memory=True), затем обычный groupby
  3. Прочитать с nrows=1_000_000 и умножить результат на число частей
  4. Читать с chunksize и usecols, суммировать куски и сложить итогправильный ответ

Разбор

Сумма складывается: частичные суммы по кускам можно объединить pd.concat(parts).groupby(level=0).sum(). usecols дополнительно режет память. Обычный read_csv грузит файл целиком и упадёт. low_memory влияет только на внутреннее определение типов, а не на объём. Экстраполяция по первому миллиону строк даёт неверный ответ.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме