Retour au Blog
Data Engineering 28 décembre 2024 7 min de lecture

Pandas à grande échelle : 10 optimisations pour les grands DataFrames

De 10 minutes à 30 secondes : downcasting des types, vectorisation, repli sur Dask.

1. Downcaster les dtypes (le plus gros gain)

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

Économise généralement 50-70 % de mémoire.

2. Utiliser des Categoricals pour les chaînes à faible cardinalité

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

3. Vectoriser au lieu d'apply

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

4-10. méthode query(), read_parquet plutôt que CSV, lecture par chunks, numba @jit, Dask pour 10GB+, backend PyArrow, groupby parallèle.

PandasPerformanceData EngineeringMemoryPython
O

Ossama Elhakki

Ingénieur IA & Systèmes ML — Maroc