Maison  >  Article  >  développement back-end  >  Pourquoi l'opérateur AND (&) dans les pandas se comporte-t-il comme l'opérateur OR (|) lors du filtrage des trames de données selon plusieurs conditions ?

Pourquoi l'opérateur AND (&) dans les pandas se comporte-t-il comme l'opérateur OR (|) lors du filtrage des trames de données selon plusieurs conditions ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 08:57:30675parcourir

Why does the AND operator (&) in pandas behave like the OR operator (|) when filtering data frames by multiple conditions?

pandas : filtrage des blocs de données avec plusieurs conditions

Dans les pandas, filtrer les blocs de données par valeurs dans plusieurs colonnes peut être délicat. Lorsque vous utilisez l'opérateur AND (&), vous pouvez vous attendre à ce qu'il se comporte comme l'opérateur OR (|), et vice versa.

Considérez le code de test suivant :

<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) &amp; (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]
print(pd.concat([df, df1, df2], axis=1, keys=[ 'original df', 'using AND (&amp;)', 'using OR (|)',]))</code>

L'inattendu ce comportement se produit dans les résultats :

      original df      using AND (&amp;)      using OR (|)    
             a  b              a   b             a   b
0            0  0              0   0             0   0
1           -1 -1            NaN NaN           NaN NaN
2            2  2              2   2             2   2
3           -1  3            NaN NaN            -1   3
4            4 -1            NaN NaN             4  -1

[5 rows x 6 columns]

L'opérateur ET (&) supprime toutes les lignes où au moins une valeur est -1, tandis que l'opérateur OU (|) supprime uniquement les lignes où les deux valeurs sont -1. Ce comportement est à l'opposé de ce qui est attendu.

La raison de ce comportement réside dans la manière dont ces opérateurs sont utilisés. Dans la condition AND, vous spécifiez de conserver les lignes où les deux conditions sont vraies, ce qui équivaut à supprimer les lignes où au moins une condition est fausse. En revanche, la condition OR spécifie de conserver les lignes où l'une ou l'autre des conditions est vraie, ce qui équivaut à supprimer les lignes où les deux conditions sont fausses.

Pour garantir la clarté et éviter toute confusion, il est recommandé d'utiliser une notation explicite pour les conditions. impliquant plusieurs colonnes. Au lieu d'enchaîner plusieurs conditions avec des opérateurs, utilisez des parenthèses pour regrouper les conditions et rendre explicite leur relation logique.

Par exemple, le code suivant spécifie explicitement les conditions AND :

<code class="python">df1 = df[(df.a != -1) & (df.b != -1)]</code>

Alors que le code suivant le code spécifie explicitement les conditions OR :

<code class="python">df2 = df[(df.a != -1) | (df.b != -1)]</code>

En utilisant une notation explicite, vous pouvez vous assurer que vos conditions sont interprétées comme prévu et éviter un comportement inattendu.

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