Python

کم کردن حافظه‌ی DataFrame (downcast + category)

اعداد صحیح و اعشاری رو downcast می‌کنی و ستون‌های متنیِ تکراری رو می‌بری روی category: مصرف حافظه 5 تا 10 برابر میاد پایین.

کاربرد

بار کردن فایل‌های چندگیگابایتی روی یه سیستم کاریِ معمولی.

پیش‌نیازها

Python 3.9+, pandas

Python
import pandas as pd

def optimize(df: pd.DataFrame) -> pd.DataFrame:
    before = df.memory_usage(deep=True).sum() / 1e6
    for col in df.select_dtypes("int64"):
        df[col] = pd.to_numeric(df[col], downcast="integer")
    for col in df.select_dtypes("float64"):
        df[col] = pd.to_numeric(df[col], downcast="float")
    for col in df.select_dtypes("object"):
        if df[col].nunique() / len(df) < 0.5:   # faible cardinalité
            df[col] = df[col].astype("category")
    after = df.memory_usage(deep=True).sum() / 1e6
    print(f"{before:.1f} Mo -> {after:.1f} Mo")
    return df

نتیجه

245.3 Mo -> 38.7 Mo

>>> df.dtypes
id_client        int32
montant        float32
categorie     category
region        category
dtype: object
PandasMémoirecategoryOptimisation

اسنیپت‌های مرتبط

بازگشت به آزمایشگاه داده