Pourquoi les opérateurs AND (&) et OR (|) de Pandas semblent-ils inversés lors de l'indexation d'un DataFrame avec plusieurs conditions ?

Linda Hamilton
Libérer: 2024-10-25 16:30:09
original
636 Les gens l'ont consulté

Why Does Pandas' AND (&) and OR (|) Operators Seem Reversed When Indexing a DataFrame with Multiple Conditions?

pandas : comportement inattendu avec plusieurs conditions lors de l'indexation d'un bloc de données

Lors du filtrage des lignes d'un DataFrame par valeurs dans plusieurs colonnes, il est essentiel de comprendre le comportement des opérateurs AND (&) et OR (|).

Dans une observation récente, il a été noté que le comportement de ces opérateurs semblait inversé. L'opérateur OR semble se comporter comme l'opérateur AND, et vice versa.

Pour illustrer, considérons le DataFrame suivant :

<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5) })

# Insert -1 values
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>
Copier après la connexion

Le résultat est :

<code class="python">      Original df      Using AND (&)      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]</code>
Copier après la connexion

Comme le montre le résultat, l'opérateur AND supprime les lignes dont au moins une valeur est -1, tandis que l'opérateur OR conserve les lignes où les deux valeurs ne sont pas -1.

Ce comportement peut sembler contre-intuitif, mais il rend Cela a un sens si nous nous souvenons que nous spécifions les conditions pour les lignes que nous voulons conserver, pas supprimer.

  • Pour df1, nous spécifions que nous voulons conserver les lignes où les deux df.a et df.b ne sont pas -1.
  • Pour df2, nous précisons que nous voulons conserver les lignes où soit df.a ou df.b n'est pas -1.

Par conséquent, le comportement observé est correct.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!