Maison  >  Article  >  développement back-end  >  Pourquoi l'utilisation des opérateurs AND (`&`) et OR (`|`) dans les opérations de filtrage Pandas produit-elle des résultats inattendus ?

Pourquoi l'utilisation des opérateurs AND (`&`) et OR (`|`) dans les opérations de filtrage Pandas produit-elle des résultats inattendus ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 06:55:28629parcourir

Why Does Using AND (`&`) and OR (`|`) Operators in Pandas Filtering Operations Produce Unexpected Results?

pandas : conditions multiples lors de l'indexation d'une trame de données - Comportement inattendu

Dans l'analyse des données, les pandas sont une bibliothèque cruciale pour manipuler et traiter les trames de données. Lors de l'exécution d'opérations de filtrage, il est essentiel de comprendre le comportement des opérateurs lors de l'utilisation de plusieurs conditions.

Considérons un scénario dans lequel nous souhaitons filtrer les lignes d'un bloc de données en fonction des valeurs de deux colonnes, "a" et " b'. Utilisation de l'opérateur AND '&' et OR '|' opérateur, nous nous attendons à ce que AND supprime les lignes où au moins une valeur est égale à -1 tandis que OR doit conserver les lignes où les deux valeurs sont -1.

<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5)})
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1

df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]

print(pd.concat([df, df1, df2], axis=1, keys=['original df', 'using AND (&)', 'using OR (|)',]))</code>

De façon inattendue, l'opérateur AND supprime chaque ligne où au moins une valeur est -1, tandis que l'opérateur OR nécessite que les deux valeurs soient -1 pour les supprimer.

La clé pour comprendre ce comportement réside dans le fait de se rappeler que nous écrivons la condition en fonction de ce que nous voulons conserver, pas ce que nous voulons supprimer.

  • Pour df1 : (df.a != -1) & (df.b != -1) signifie "conserver les lignes où df.a n'est pas - 1 et df.b n'est pas -1", ce qui équivaut à supprimer des lignes où au moins une valeur est -1.
  • Pour df2 : (df.a != -1) | (df.b != -1) signifie "conserver les lignes où df.a ou df.b n'est pas -1", ce qui équivaut à supprimer les lignes où les deux valeurs sont -1.

Il est crucial d'utiliser un accès chaîné comme df.loc et df.iloc au lieu de df['a'][1] = -1 pour éviter des problèmes potentiels.

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