AI資格ドリル
資格を選ぶ

用語比較

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.wherenp.select
条件の数1つ(真か偽かの2択)複数(condlist のリスト)
引数の形np.where(condition, x, y)np.select(condlist, choicelist, default=0)
どれも当てはまらないとき偽の要素として y が選ばれるdefault の値が入る(既定は 0)
複数の条件が真のとき条件は1つなので起きないcondlist で最初に見つかった条件を使う

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

条件に合う要素だけ値を入れ替えたい人

np.where を使います。条件が真の要素は x、偽の要素は y になります。

02

点数を A・B・C のように3段階以上に分けたい人

np.select を使い、条件のリストと、それぞれの結果のリストを渡します。

03

どの条件にも当てはまらない要素に、決まった値を入れたい人

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. 1

    結果の種類を数える

    結果が2種類だけなら np.where、3種類以上なら np.select です。

  2. 2

    条件の優先順位を決める

    np.select では、優先する条件を condlist の先頭に置きます。

  3. 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 がブロードキャストされることを言える

同じ資格で次に知りたいこと

よくある質問

Qnp.whereとnp.selectの違いは?

A

np.where は条件が真なら x、偽なら y を選びます。np.select は複数の条件と選択肢のリストから選びます。

Qnp.selectのdefaultを省略するとどうなりますか?

A

どの条件にも当てはまらない要素が 0 になります。default の既定が 0 だからです。

Qnp.selectで複数の条件が真のときは?

A

condlist で最初に見つかった条件が使われます。

Qデータ分析試験の範囲?

A

本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)