はじめに
NumPyには、配列の操作や条件分岐、ブール評価などを簡潔に記述できる便利関数が多数用意されています。中でも np.where、np.any、np.all、np.select は、データの前処理や集計、可視化において頻出の関数です。
この記事では、それぞれの関数の基本的な使い方から、実務でよく使われる応用パターンまでを豊富なサンプルとともに紹介します。
np.where:条件に応じた値の切り替え
基本構文
np.where(条件, 条件がTrueのときの値, 条件がFalseのときの値)例1:配列の値を条件付きで変換
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
new_arr = np.where(arr > 30, 1, 0)
print(new_arr) # [0 0 0 1 1]例2:文字列ラベルをつける
labels = np.where(arr > 30, "High", "Low")
print(labels) # ['Low' 'Low' 'Low' 'High' 'High']np.any / np.all:論理評価に使える関数
np.any:1つでもTrueならTrue
bools = np.array([False, False, True])
print(np.any(bools)) # Truenp.all:すべてTrueならTrue
bools = np.array([True, True, True])
print(np.all(bools)) # True2次元配列のaxis指定
mat = np.array([[True, False], [True, True]])
print(np.any(mat, axis=0)) # → [True True]
print(np.all(mat, axis=1)) # → [False True]np.select:複数条件で柔軟に値を割り当て
基本構文
np.select([条件1, 条件2, ...], [値1, 値2, ...], default=その他の値)例:成績評価のランク分け
scores = np.array([35, 55, 75, 90])
conditions = [scores < 50, scores < 70, scores < 85]
choices = ["D", "C", "B"]
labels = np.select(conditions, choices, default="A")
print(labels) # ['D' 'C' 'B' 'A']複雑な if-elif-else を書かなくても、簡潔に条件分岐できます。
実用パターンのまとめ
条件付きフィルタ → where
- ラベル化
- マスキング
- フィルタ処理の前段階
ブール評価 → any / all
- 欠損や異常値のチェック
- 条件に合う行・列の抽出
多段階の条件 → select
- スコア分類
- 価格帯ラベル付け
- 教師データのグループ化
よくあるミスと対策
selectにおけるconditionsとchoicesの数が合っていない → エラーになりますany/allにaxisを指定しないと全体評価になる → 意図と違う結果に注意whereの2項目目・3項目目のブロードキャストに失敗 → 配列の形を確認しましょう
おわりに
np.where, np.any, np.all, np.select は、使い慣れると複雑な条件処理を短く・読みやすく・高速に記述できる強力な関数群です。
これらの関数を使いこなすことで、データの前処理や特徴量生成の質が格段に向上します。次回は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 を使いこなす

コメント