"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi «SettingwithCopyWarning» se produit-il lors de la modification des fractures de données dérivées de sous-ensembles?

Pourquoi «SettingwithCopyWarning» se produit-il lors de la modification des fractures de données dérivées de sous-ensembles?

Publié le 2025-02-21
Parcourir:272

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

Localisation du coupable de la définition de lawarning

lorsque vous tentez de modifier un dataframe en utilisant .loc [row_indexer, coli_indexer] = valeur, le "setwithCopyWarning" persiste. Ce problème découle 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

Initialement, il n'y a pas d'avertissements. Cependant, la création d'un nouveau DataFrame basé sur un sous-ensemble de DF:

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

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

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

déclenche Le avertissement.

Solution: Utilisation .Copy () Pour les cadres de données dérivés d'un sous-ensemble

pour résoudre ce problème, utilisez toujours la méthode .copy () lors de la création 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 invoquant .copy (), vous créez une copie indépendante du sous-ensemble, en évitant l'avertissement lors de la modification des valeurs.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3