pandas : `SettingWithCopyWarning`, que faire ?

poze 3 months ago604 gadefr

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

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

Dyagnostik IA

Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.

poze 3 months ago

1 Repons

7
✓
✓ Repons yo aksepte

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.

Konekte pou di lòt moun si li te mache.

answered 3 months ago

Sign in and verify your email to post an answer.