Maison >développement back-end >Tutoriel Python >Pourquoi les opérateurs AND (&) et OR (|) de Pandas semblent-ils inversés lors de l'indexation d'un DataFrame avec plusieurs 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>
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>
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.
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!