Pandas удобен для аналитики, но при работе с большими CSV, Excel или логами быстро упирается в RAM. Файл на 1 ГБ легко может занять 3–8 ГБ памяти после загрузки. Причина — типы данных, строки object, временные копии и неэффективное чтение. Ниже — практические способы снизить расход памяти и ускорить обработку. ⚡
-
Читайте только нужные данные
Не загружайте весь файл «на всякий случай».df = pd.read_csv("data.csv", usecols=["user_id", "date", "amount"])usecols сокращает память сразу на этапе чтения.
-
Задавайте типы данных вручную
По умолчанию Pandas часто использует int64 и float64, хотя хватает меньших типов.dtype = { "user_id": "int32", "amount": "float32", "status": "int8" } df = pd.read_csv("data.csv", dtype=dtype)Это особенно полезно для числовых колонок с ограниченным диапазоном.
-
Преобразуйте object в category
Если в столбце много повторяющихся строк — категории экономят память в разы.df["city"] = df["city"].astype("category")Подходит для городов, статусов, типов событий, сегментов клиентов.
-
Парсите даты при чтении
Так вы избегаете лишних преобразований после загрузки.df = pd.read_csv("data.csv", parse_dates=["created_at"]) -
Загружайте файл по частям
Если файл слишком большой, используйте chunksize.chunks = pd.read_csv("data.csv", chunksize=100_000) for chunk in chunks: process(chunk)Это стандартный способ работы с файлами, которые не помещаются в память целиком. 📦
-
Удаляйте ненужные DataFrame
Промежуточные копии часто незаметно съедают RAM.del temp_df import gc gc.collect() -
Проверяйте реальное потребление памяти
df.info(memory_usage="deep")deep показывает более точную оценку, особенно для строковых полей.
-
Сжимайте числовые типы автоматически
После загрузки можно пройтись по столбцам и уменьшить разрядность: int64 → int32 → int16, float64 → float32. Это даёт ощутимую экономию без потери смысла данных. 🔍
-
Используйте эффективные форматы
CSV удобен, но тяжёлый. Для повторной работы лучше сохранять в:- parquet — компактный и быстрый
- feather — очень быстрый для обмена между Python-процессами
df.to_parquet("data.parquet") -
Когда Pandas уже не хватает
Если данных десятки гигабайт, смотрите в сторону:- Polars — быстрый и экономный по памяти
- Dask — обработка больших данных по частям
- PySpark — для распределённых вычислений 🚀
Главная стратегия проста: меньше читать, точнее задавать типы, не хранить лишние копии и переходить на parquet. В реальных задачах это снижает расход памяти в 2–10 раз и делает обработку больших файлов в Pandas заметно стабильнее.
📚 Загляните в подборку каналов про IT — там ещё больше практики по Python, аналитике, data engineering и инструментам для работы с данными.