ホームページ > バックエンド開発 > Python チュートリアル > 複数の条件を使用したパンダのインデックス作成で予期しない動作が発生するのはなぜですか?

複数の条件を使用したパンダのインデックス作成で予期しない動作が発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-25 09:47:02
オリジナル
267 人が閲覧しました

Why Does Pandas Indexing with Multiple Conditions Exhibit Unexpected Behavior?

Pandas の複数条件のインデックス作成: 予期しない動作

pandas では、DataFrame へのフィルターの適用は一般的な操作です。ただし、複数の条件、特に AND や OR などの論理演算子を使用すると、予期しない結果が発生する可能性があります。

問題:

2 つの列の値に基づいて行をフィルタリングする場合、AND 演算子は OR のように動作するように見え、その逆も同様です。たとえば、以下のコードは次のようにする必要があります。

  • いずれかの列値が -1 である行を除外するには、AND 演算子を使用します。
  • 両方の列値が -1 である行を除外するには、OR 演算子を使用します。 -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>
ログイン後にコピー

説明:

予期しない動作は、パンダのインデックス作成のコンテキストで論理演算子がどのように解釈されるかに起因します。

  • AND 演算子:

    • df[(df.a != -1) & (df.b != -1)] を意味します「df.a が -1 ではなく、df.b が -1 ではない行を保持します。」
    • これにより、少なくとも 1 つの値が -1 である行が除外されます。
  • OR 演算子:

    • df[(df.a != -1) | (df.b != -1)] は、「df.a または df.b のいずれかが -1 でない行を保持する」ことを意味します。
    • これにより、両方の値が -1 である行が除外されます。

したがって、AND 演算子は、いずれかの列に -1 がないことに基づいて行を除外するため、OR と同様に動作します。逆に、OR 演算子は、両方の列に -1 が含まれていない場合にのみ行を含めるため、AND のように動作します。

補足:

  • を使用することをお勧めします。よりクリーンで安全なコードの実践のために、連鎖インデックス (例: df'a' = -1) の代わりに .loc と .iloc を使用します。

以上が複数の条件を使用したパンダのインデックス作成で予期しない動作が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート