Maison >développement back-end >Tutoriel Python >Pourquoi le remplacement des valeurs DataFrame en fonction d'une condition ne fonctionne-t-il pas directement et comment puis-je y remédier ?

Pourquoi le remplacement des valeurs DataFrame en fonction d'une condition ne fonctionne-t-il pas directement et comment puis-je y remédier ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 00:25:10228parcourir

Why Doesn't Replacing DataFrame Values Based on a Condition Work Directly, and How Can I Fix It?

Remplacement des valeurs DataFrame à l'aide de la logique conditionnelle

Dans Pandas, la manipulation du DataFrame est un aspect crucial. Une opération courante consiste à remplacer les valeurs en fonction de conditions spécifiques. Considérez le scénario suivant :

Question :

Je souhaite remplacer les valeurs d'une colonne DataFrame qui dépassent un seuil par zéro. J'ai tenté d'y parvenir en utilisant :

df[df.my_channel > 20000].my_channel = 0

Cependant, cela semble fonctionner uniquement lors de la copie du canal dans un nouveau DataFrame. Pourquoi cela ne fonctionne-t-il pas avec le DataFrame d'origine ?

Réponse :

Le problème est lié à l'indexeur utilisé. Avant la version 0.20.0 de Pandas, l'indexeur .ix était couramment utilisé. Cependant, il est depuis obsolète. Utilisez plutôt les indexeurs .loc ou .iloc.

Pour résoudre votre problème, vous pouvez utiliser le code suivant :

mask = df.my_channel > 20000
column_name = 'my_channel'
df.loc[mask, column_name] = 0

Ce code effectue les actions suivantes :

  1. le masque sélectionne les lignes où df.my_channel > 20000 est True.
  2. df.loc[mask, column_name] = 0 définit les lignes sélectionnées dans la colonne column_name sur 0.

Vous pouvez également utiliser une seule ligne :

df.loc[df.my_channel > 20000, 'my_channel'] = 0

Notez que dans ce cas, il est recommandé d'utiliser .loc plutôt que .iloc car ce dernier peut entraîner dans une NotImplementedError.

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