کم کردن حافظهی 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