ホームページ  >  記事  >  バックエンド開発  >  Pandas のフィルタリング操作で AND (`&`) および OR (`|`) 演算子を使用すると予期しない結果が生じるのはなぜですか?

Pandas のフィルタリング操作で AND (`&`) および OR (`|`) 演算子を使用すると予期しない結果が生じるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-25 06:55:28629ブラウズ

Why Does Using AND (`&`) and OR (`|`) Operators in Pandas Filtering Operations Produce Unexpected Results?

pandas: データ フレームのインデックス作成中の複数の条件 - 予期しない動作

データ分析において、pandas はデータ フレームを操作および処理するための重要なライブラリです。フィルタリング操作を実行するときは、複数の条件を使用するときの演算子の動作を理解することが重要です。

2 つの列 'a' と ' の値に基づいてデータ フレーム内の行をフィルタリングするシナリオを考えてみましょう。 b'. AND '&' 演算子と OR '|' の使用演算子では、AND は少なくとも 1 つの値が -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 演算子は少なくとも 1 つの値が含まれるすべての行を削除します。

この動作を理解する鍵は、保持したいものに基づいて条件を記述していることを覚えておくことです。

  • df1 の場合: (df.a != -1) & (df.b != -1) は、「df.a が存在しない行を保持する - 1 かつ df.b は -1 ではありません」。これは、少なくとも 1 つの値が -1 である行を削除することと同じです。
df2 の場合: (df.a != -1) | (df.b != -1) は、「df.a または df.b のいずれかが -1 でない行を保持する」ことを意味します。これは、両方の値が -1 である行を削除するのと同じです。

潜在的な問題を回避するには、df['a'][1] = -1 の代わりに df.loc や df.iloc などの連鎖アクセスを使用することが重要です。

以上がPandas のフィルタリング操作で AND (`&`) および OR (`|`) 演算子を使用すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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