Maison >développement back-end >Tutoriel Python >Pourquoi « SettingWithCopyWarning » se produit-il lors de la modification de DataFrames dérivés de sous-ensembles ?

Pourquoi « SettingWithCopyWarning » se produit-il lors de la modification de DataFrames dérivés de sous-ensembles ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 12:12:02701parcourir

Why Does `SettingWithCopyWarning` Occur When Modifying DataFrames Derived from Subsets?

Localisation du coupable de SettingWithCopyWarning

Lors de la tentative de modification d'un DataFrame à l'aide de .loc[row_indexer, col_indexer] = value, le "SettingWithCopyWarning" persiste. Ce problème provient de l'accès à une tranche DataFrame à partir d'un autre DataFrame sans invoquer la méthode .copy().

Reproduction d'erreur étape par étape

Considérez le code suivant :

import pandas as pd

d = {'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]}
df = pd.DataFrame(data=d)

df['new_column'] = None
df.loc[0, 'new_column'] = 100

Au départ, il n'y a aucun avertissement. Cependant, créer un nouveau DataFrame basé sur un sous-ensemble de df:

new_df = df.loc[df.col1 > 2]

puis tenter de modifier le nouveau DataFrame à l'aide de .loc:

new_df.loc[2, 'new_column'] = 100

déclenche l'avertissement.

Solution : Utiliser .copy() pour les trames de données dérivées d'un sous-ensemble

Pour résoudre ce problème, utilisez toujours la méthode .copy() lors de la création d'un nouveau DataFrame basé sur un sous-ensemble d'un DataFrame existant.

new_df_copy = df.loc[df.col1 > 2].copy()
new_df_copy.loc[2, 'new_column'] = 100

En appelant .copy(), vous créez une copie indépendante du sous-ensemble, évitant ainsi l'avertissement lors de la modification des valeurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn