pandas : `SettingWithCopyWarning`, que faire ?

posée 3 months ago607 vuesfr

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

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

Diagnostic IA

Généré par IA. Ce n'est pas une réponse — la communauté ci-dessous le confirme ou le corrige. Vérifiez toujours avant de vous y fier.

posée 3 months ago

1 réponse

7
✓
✓ Réponse acceptée

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.

Connectez-vous pour dire si ça a marché.

answered 3 months ago

Sign in and verify your email to post an answer.