العودة إلى المدونة
Data Engineering 28 دجنبر 2024 7 min للقراءة

Pandas على نطاق واسع: 10 تحسينات للـ DataFrames الكبيرة

من 10 دقائق إلى 30 ثانية: تصغير أنواع البيانات، والتجهيز المتجه، والرجوع إلى Dask.

1. تصغير أنواع البيانات (أكبر مكسب)

def reduce_mem_usage(df):
    for col in df.columns:
        col_type = df[col].dtype
        if col_type != object:
            c_min = df[col].min()
            c_max = df[col].max()
            if str(col_type)[:3] == 'int':
                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
                    df[col] = df[col].astype(np.int8)
            else:
                df[col] = pd.to_numeric(df[col], downcast='float')
    return df

يوفّر عادةً 50-70% من الذاكرة.

2. استخدام Categoricals للسلاسل منخفضة التعددية

df['city'] = df['city'].astype('category')  # 10x less memory

3. التجهيز المتجه بدلاً من apply

# SLOW
df['result'] = df.apply(lambda r: r['a'] * r['b'], axis=1)
# FAST
df['result'] = df['a'] * df['b']

4-10. الطريقة query()، وread_parquet بدلاً من CSV، والقراءة على دفعات، وnumba @jit، وDask لأكثر من 10GB، وواجهة PyArrow الخلفية، وgroupby المتوازي.

PandasPerformanceData EngineeringMemoryPython
O

Ossama Elhakki

مهندس ذكاء اصطناعي وأنظمة ML — المغرب