はじめに
データ分析において「特定の条件に合うデータだけを取り出す」という処理は非常に頻繁に発生します。これを効率よく行うための機能が、NumPyの「条件抽出(Boolean indexing)」と「論理演算」です。
Pythonの基本構文でも for や if を使って条件付きの抽出は可能ですが、NumPyではより高速かつ簡潔に、しかも大量データに対しても処理できるのが特徴です。
本記事では、論理演算子の使い方から、条件の組み合わせ、複数条件の抽出、ブール配列を使ったフィルタリングまで、実例を交えてわかりやすく解説します。
配列に対する条件判定の基本
スカラーとの比較
NumPy配列に対してスカラー(1つの数値)を使った比較をすると、各要素ごとの結果がTrue/Falseで返される配列になります。
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
print(arr > 25)
# [False False True True True]このように、条件に合うかどうかを要素単位で一括処理できます。
条件に合う要素だけを抽出する
Boolean配列を使ったフィルタリング
比較演算の結果はTrue/Falseの配列になります。それをそのままインデックスに使うことで、条件を満たす要素だけを取り出せます。
arr = np.array([10, 20, 30, 40, 50])
condition = arr > 25
print(arr[condition]) # [30 40 50]もちろん、これを1行で書くこともできます:
print(arr[arr > 25])複数の条件を組み合わせる
AND(かつ)条件
Pythonの論理演算子 and は配列には使えません。代わりに & を使います。
arr = np.array([10, 20, 30, 40, 50])
print(arr[(arr > 15) & (arr < 45)]) # [20 30 40]OR(または)条件
or の代わりに | を使います。
print(arr[(arr < 25) | (arr > 45)]) # [10 20 50]NOT(否定)
~ を使えば、条件を否定できます。
print(arr[~(arr > 25)]) # [10 20 25]⚠ 条件式はそれぞれ 丸括弧()で囲む 必要があります。そうしないと構文エラーになります。
条件抽出の応用テクニック
配列の値を置換する(where)
arr = np.array([10, 20, 30, 40, 50])
print(np.where(arr > 30, 1, 0)) # [0 0 0 1 1]これは条件を満たす部分を1に、それ以外を0に置き換える例です。マスク処理や分類ラベルの変換などで使えます。
条件に合うインデックスを取得する(nonzero, where)
arr = np.array([5, 10, 0, -3, 8])
print(np.where(arr > 0)) # (array([0, 1, 4]),)インデックスが返るので、後で arr[インデックス] で取り出せます。
よくあるエラーと注意点
& や | を使うときに()を忘れる
# 間違い(構文エラー)
# arr[arr > 10 & arr < 30]
# 正しい
arr[(arr > 10) & (arr < 30)]bool配列の長さが違う
ブール配列を使ってフィルタするとき、元の配列と形状が一致していないとエラーになります。
arr = np.array([1, 2, 3])
cond = np.array([True, False])
print(arr[cond]) # → エラー!おわりに
NumPyの条件抽出と論理演算を使えば、複雑な「データのふるい分け」もシンプルに記述でき、処理速度も高速です。
今回紹介した基本操作に慣れておくことで、実務におけるデータ前処理や統計的な分析作業が格段に効率化されます。
次回は、NumPyにおける「乱数生成とシミュレーション」について解説します。
✅ NumPy中級シリーズ:目次リンク
🔹 NumPy中級シリーズ一覧(基礎〜応用)
- 【中級①】配列操作の基本と応用|reshape・axis・スライスをマスター
↳ NumPy中級①:配列操作の基本と応用|reshape・axis・スライスをマスター - 【中級②】ブロードキャストと演算の仕組みを徹底解説
↳ NumPy中級②:ブロードキャストと演算の仕組みを徹底解説 - 【中級③】条件抽出と論理演算|配列を自在にフィルタリングする
↳ NumPy中級③:条件抽出と論理演算|配列を自在にフィルタリングする - 【中級④】乱数生成とシミュレーション|再現性と統計処理の基礎
↳ NumPy中級④:乱数生成とシミュレーション|再現性と統計処理の基本 - 【中級⑤】応用編:np.where, np.select, np.any, np.allの便利な使い方
↳ NumPy中級⑤:便利関数大全|np.where, np.any, np.all, np.select を使いこなす

コメント