Оптимизация памяти в Pandas: как работать с большими файлами

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

pandasоптимизация памятиparquet

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 и инструментам для работы с данными.

🗣 Подборки каналов
🧠 Каталог ботов и приложений
🗺 Навигация

Читайте так же