ホームページ  >  記事  >  バックエンド開発  >  複数の条件でデータ フレームをフィルター処理するときに、パンダの AND 演算子 (&) が OR 演算子 (|) のように動作するのはなぜですか?

複数の条件でデータ フレームをフィルター処理するときに、パンダの AND 演算子 (&) が OR 演算子 (|) のように動作するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 08:57:30787ブラウズ

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

pandas: 複数の条件でデータ フレームをフィルタリングする

pandas では、複数の列の値でデータ フレームをフィルタリングするのは難しい場合があります。 AND 演算子 (&) を使用する場合、OR 演算子 (|) のように動作することを期待するかもしれませんし、その逆も同様です。

次のテスト コードを考えてみましょう。

<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>

予期しないもの結果では動作が発生します:

      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]

AND 演算子 (&) は、少なくとも 1 つの値が -1 であるすべての行を削除しますが、OR 演算子 (|) は両方の値が -1 である行のみを削除します。この動作は予想とは逆です。

この動作の理由は、これらの演算子の使用方法にあります。 AND 条件では、両方の条件が true である行を保持するように指定しています。これは、少なくとも 1 つの条件が false である行を削除することと同じです。対照的に、OR 条件は、どちらかの条件が true である行を保持することを指定します。これは、両方の条件が false である行を削除するのと同じです。

明確さを確保し、混乱を避けるために、条件には明示的な表記を使用することをお勧めします。複数の列が関係する。複数の条件を演算子で連結する代わりに、括弧を使用して条件をグループ化し、それらの論理関係を明示します。

たとえば、次のコードは AND 条件を明示的に指定します。

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

一方、次のコードは AND 条件を明示的に指定します。コードは OR 条件を明示的に指定します:

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

明示的な表記法を使用すると、条件が意図したとおりに解釈され、予期しない動作を防ぐことができます。

以上が複数の条件でデータ フレームをフィルター処理するときに、パンダの AND 演算子 (&) が OR 演算子 (|) のように動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。