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
Libérer: 2024-10-29 12:12:02
original
692 Les gens l'ont consulté

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
Copier après la connexion

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]
Copier après la connexion

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

new_df.loc[2, 'new_column'] = 100
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal