用語比較
np.whereとnp.selectの違い|2択で値を選ぶか、複数の条件から選ぶか(Python3データ分析)
np.where は、条件が真なら x、偽なら y の要素を選びます。np.select は、条件のリストと選択肢のリストを渡して、どの条件が真かで選びます。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
np.whereとnp.selectの要点
np.where
条件が1つで、真なら x、偽なら y を選ぶ。x・y・condition は、同じ形にブロードキャストできる必要がある。
np.select
条件を condlist、選択肢を choicelist のリストで渡す。どの条件も偽の要素には default(既定は 0)が入る。
違いを表で確認
| 比較軸 | np.where | np.select |
|---|---|---|
| 条件の数 | 1つ(真か偽かの2択) | 複数(condlist のリスト) |
| 引数の形 | np.where(condition, x, y) | np.select(condlist, choicelist, default=0) |
| どれも当てはまらないとき | 偽の要素として y が選ばれる | default の値が入る(既定は 0) |
| 複数の条件が真のとき | 条件は1つなので起きない | condlist で最初に見つかった条件を使う |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
条件に合う要素だけ値を入れ替えたい人
np.where を使います。条件が真の要素は x、偽の要素は y になります。
点数を A・B・C のように3段階以上に分けたい人
np.select を使い、条件のリストと、それぞれの結果のリストを渡します。
どの条件にも当てはまらない要素に、決まった値を入れたい人
np.select の default に値を渡します。省略すると 0 になります。
具体例で使い分ける
例 1
np.where は真なら a、偽なら 10 * a
公式の例の a = np.arange(10) に、np.where(a < 5, a, 10 * a) を使います。
- a は 0 から 9 までの配列です。
- 5 より小さい要素はそのまま、5 以上の要素は 10 倍になります。
- 結果は、0・1・2・3・4・50・60・70・80・90 です。
結論: np.where は、1つの条件で、2つの値のどちらかを選びます。
例 2
np.select は条件ごとに別の結果を選び、残りは default
公式の例の x = np.arange(6) に、condlist = [x < 3, x > 3]、choicelist = [-x, x ** 2]、default = 42 で np.select を使います。
- x が 3 より小さい要素は -x、3 より大きい要素は x ** 2 になります。
- どちらの条件にも当てはまらない x = 3 の要素は、default の 42 です。
- 結果は、0・-1・-2・42・16・25 です。
結論: np.select は、3通り以上の結果を、条件ごとに分けて選べます。
例 3
複数の条件が真なら、最初の条件が使われる
同じ x に、condlist = [x <= 4, x > 3]、choicelist = [x, x ** 2]、default = 55 で np.select を使います。
- x = 4 は、x <= 4 と x > 3 の両方が真です。
- condlist で先にある x <= 4 が使われ、4 はそのまま 4 になります。
- 結果は、0・1・2・3・4・25 です。
結論: np.select では、condlist の並び順が、優先順位になります。
問題文から答えを選ぶ手順
- 1
結果の種類を数える
結果が2種類だけなら np.where、3種類以上なら np.select です。
- 2
条件の優先順位を決める
np.select では、優先する条件を condlist の先頭に置きます。
- 3
どれにも当てはまらない要素の値を決める
np.select の default に渡します。省略すると 0 になります。
試験での見分け方
- 12択で値を選ぶときは、np.where を使う。
- 23通り以上に振り分けるときは、np.select を使う。
- 3np.select の condlist と choicelist は、同じ長さにする。
- 4複数の条件が真になり得るときは、優先する条件を condlist の先頭に置く。
誤答しやすい選択肢
np.select の default を省略しても、元の値が残ると考える
修正: default の既定は 0 です。どの条件にも当てはまらない要素は 0 になるので、必要なら default を指定します。
複数の条件が真のとき、最後の条件が使われると考える
修正: 公式は、最初に見つかった条件を使うと書いています。公式の例では、x = 4 が 25 ではなく 4 になります。
np.where の x と y を、同じ形でなくてよいと考える
修正: 公式は、x・y・condition が、ある形にブロードキャストできる必要があると書いています。
確認問題
Q1条件が真なら x、偽なら y を選ぶ NumPy の関数は?
答え: np.where
公式は、condition に応じて x か y から要素を選ぶ関数としています。
Q2条件のリストと選択肢のリストから選ぶ関数は?
答え: np.select
公式は、condlist と choicelist を引数に取ると書いています。
Q3np.select で、どの条件も偽の要素に入る値の既定は?
答え: 0
公式の引数の定義では、default=0 です。
Q4np.select で複数の条件が真のとき、使われるのは?
答え: condlist で最初に見つかった条件
公式は、the first one encountered in condlist is used と書いています。
到達チェック
- np.where が2択、np.select が複数の条件であると言える
- np.select の default の既定が 0 であると答えられる
- 複数の条件が真のとき、最初の条件が使われると説明できる
- np.where の x・y・condition がブロードキャストされることを言える
関連ページで確認する
同じ資格で次に知りたいこと
- sort_valuesとsort_indexの違い|列の値で並べるか、行のラベルで並べるか(Python3データ分析)
pandasのsort_values(列などの値で並べ替え)とsort_index(行や列のラベルで並べ替え)の違いを、並べる基準、by引数、欠損値の扱いで整理します。pandas公式リファレンスの例で、col1の値で並べると
NaNが末尾になり、indexで並べると1・29・100・150・234の順になる点つきです。 - train_test_splitのrandom_stateを固定する場合と指定しない場合の違い(再現性)
train_test_splitのrandom_stateに整数を渡す場合と、指定しない場合の違いを、再現性・shuffleとの関係・公式例の出力で解説。Python3エンジニア認定データ分析試験の公式例にあるrandom_state=0の意味と確認問題つきです。
- groupbyのaggとtransformの違い|グループごとに1行へまとめるか、元と同じ行数で返すか(Python3データ分析)
pandasのgroupbyで使うaggregate(agg。グループごとの要約値)とtransform(元と同じindexの結果)の違いを、行数、index、使いどころで整理します。pandas公式ユーザーガイドの例で、animalsのgroupby("kind").sum()がcatとdogの2行になり、cumsum()が元の5行のままになる点つきです。
よくある質問
Qnp.whereとnp.selectの違いは?
np.where は条件が真なら x、偽なら y を選びます。np.select は複数の条件と選択肢のリストから選びます。
Qnp.selectのdefaultを省略するとどうなりますか?
どの条件にも当てはまらない要素が 0 になります。default の既定が 0 だからです。
Qnp.selectで複数の条件が真のときは?
condlist で最初に見つかった条件が使われます。
Qデータ分析試験の範囲?
本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
