Python

Python基礎:whereメソッド

スポンサーリンク

はじめに

データ分析をしている中では、データフレームの要素を参照して、条件に基づいて値を変更したい場面がありますよね。 ある条件のときは、’a’、ある条件のときは’b’とする、のようなイメージです。今回はこれを実現する、whereメソッドを扱います。 さっそくみていきましょう。

Whereメソッド

whereメソッドは第一引数にbool型の値を持つ配列を戻す条件式を指定します。条件式がTrueの場合は元の値が出力され、Falseのはother引数で指定した値へ変換されます。other引数の初期値はNaNとなります。

シリーズの場合

シリーズを作成して、角括弧[ ]によるbool型の値を持つ配列のデータ参照とwhereメソッドの違いも確認しておきましょう。

# 角括弧によるbool型の値を持つ配列のデータ参照
ser=pd.Series([2,4,6,8,10])
ser[ser>3]

角括弧による処理の時は、条件に合致するものだけが結果として返されます。一方で、whereメソッドでは次のようになります。

# whereメソッド
ser.where(ser>3)

このようにwhereメソッドでは条件に合致するところはそのままの値が返り、そのほかの部分ではNaNが返ります。

データフレームの場合

データフレームの場合は、シリーズの場合と挙動が異なるため注意が必要です。データフレームの場合は、 角括弧[ ]によるbool型の値を持つ配列のデータ 選択とwhereメソッドは同等のデータフレームを返します。

# サンプルデータの作成
val=np.random.randint(0,10,size=25).reshape(5,5)
df=pd.DataFrame(val,columns=list('abcde'))
df

このデータに対して角括弧とbool型の値を持つ配列の組み合わせでの処理をみてみます。

# 角括弧によるbool型の値を持つ配列によるデータ選択
df[df>3]

同様にwhereメソッドをつかってみましょう。

# whereメソッド
df.where(df>3)

このようにdefaultでは全く同じ結果となります。whereメソッドではother引数があり、条件に合致しなかった要素にNaNではなく特定の値を代入することができます。

df.where(df>3,other=100)

whereメソッド以外にも代入演算子を使って、条件に合致するところの値を変えることができます。

# データ作成
_df=df.where(df>3,other=100)
_df

このデータに対して、角括弧ど代入演算子を使って新しい値の代入をしてみます。

_df[_df==100]=-500
_df
スポンサーリンク

まとめ

いかがでしょうか?データ処理するときにはよく使う操作だと思いますので、身に着けておきましょう。また、whereメソッドと逆の動作をするmaskメソッドもあります。こちらは、Trueがother引数で指定した値、Falseがそのままの値を返します。合わせて覚えておきましょう。

コメント

タイトルとURLをコピーしました