pandas : `SettingWithCopyWarning`, que faire ?

asked 3 months ago608 viewsfr

3
actifs = df[df['statut'] == 'actif']
actifs['score'] = actifs['score'] * 2

J'obtiens SettingWithCopyWarning. Ma modification est-elle appliquée ou pas ?

AI diagnosis

AI-generated. Not an answer — the community below confirms or corrects it. Always verify before relying on it.

asked 3 months ago

1 Answer

7
✓
✓ Accepted answer

L'avertissement signifie que actifs peut être une vue ou une copie de df, et que pandas ne peut pas garantir laquelle. Ta modification peut donc ne pas se propager comme tu l'imagines.

Selon l'intention :

Modifier df lui-même : utilise .loc en une seule opération :

df.loc[df['statut'] == 'actif', 'score'] *= 2

Travailler sur un sous-ensemble indépendant : fais une copie explicite :

actifs = df[df['statut'] == 'actif'].copy()
actifs['score'] *= 2

À partir de pandas 3.0, le Copy-on-Write est activé par défaut : tout sous-ensemble se comporte comme une copie, et l'avertissement disparaît. Autant écrire dès maintenant du code compatible (.loc ou .copy() explicites). Tu peux l'activer dès aujourd'hui avec pd.options.mode.copy_on_write = True.

Sign in to tell others whether this worked.

answered 3 months ago

Sign in and verify your email to post an answer.