Как прочитать большой файл в pandas
Вопрос
Вам дали CSV на 40 ГБ, а на ноутбуке 16 ГБ памяти. Как посчитаете нужные метрики?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Сначала посмотреть заголовок и пару тысяч строк: `nrows`
`usecols` и экономные `dtype` (`category`, `int32`, `float32`)
`chunksize` для складываемых агрегатов
Медиана и уникальные по кускам не складываются: нужны другие подходы
Конвертировать в Parquet один раз
DuckDB или Polars для запросов прямо по файлу
Что могут спросить следом
- Как посчитать число уникальных пользователей по кускам?
- Чем DuckDB тут лучше pandas?
- Когда пора в Spark?
Разбор
Сначала читаю nrows=5000, смотрю колонки, типы и разделитель. Дальше режу объём: usecols только нужных колонок и экономные типы, строки с повторами в category, числа в int32 или float32, это часто уменьшает объём в разы. Если метрика складывается, сумма, количество, минимум, читаю chunksize и объединяю частичные результаты. С медианой и уникальными так не выйдет: уникальных можно собрать в множество, если их немного, а медиану считать приближённо или другим инструментом. Практичный путь: один раз перегнать файл в Parquet, а запросы писать в DuckDB или Polars, они читают файл потоково и параллельно. Если данных сотни гигабайт и это регулярная задача, это уже работа для хранилища или Spark.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Чтение и запись данных»
- Агрегат по кускам через chunksize
- Вложенный JSON заказов в таблицу
- Разбор выгрузки из Excel: sep, decimal, dtype
- Запятая в дробях при чтении CSV
- CSV для русского Excel
- read_csv для русской выгрузки
- Целые числа стали float после чтения
- Ловушки при чтении данных