はじめに
データ分析をしている中では、データフレームの要素を参照して、条件に基づいて値を変更したい場面がありますよね。 ある条件のときは、’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がそのままの値を返します。合わせて覚えておきましょう。
コメント