筋肉で解決しないために。

日々出会うモノに対する考察をしたり、主に以下のテーマに関して書いています。 データサイエンス/人工知能/AI/機械学習/DeepLearning/Python//数学/統計学/統計処理

np.whereとdf.whereの違い

f:id:watarumon:20180904173907j:plain
図1 2匹の羊

当たり前ですが、
numpyのndarray.where()
pandasのDataFrame.where()は引数が異なる。

この前、混乱したのでまとめておきたいと思います。

ndarray.where()

まずは、numpy、ndarrayから。

import numpy as np
nd = np.arange(10)
nd

>>>
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#where

np.where(nd < 5,0,1)

>>>
array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])

条件式がTrueなら、第2引数。 Falseなら第3引数が返っていることがわかります。

DataFrame.where()

次に、pandas、Dataframeについて。

import pandas as pd
dfw = pd.DataFrame(np.arange(10))
dfw

>>>
   0
0  0
1  1
2  2
3  3
4  4
5  5
6  6
7  7
8  8
9  9
#where

dfw.where(df[0] < 5,0)

>>>

   0
0  0
1  1
2  2
3  3
4  4
5  0
6  0
7  0
8  0
9  0

条件式がTrueなら、それ自身が返っています。 Falseなら第2引数が返っていることがわかります。

ちなみに、条件式がTrueのときに、第2引数を返したいなら、 DataFrame.mask()を使います。

DataFrame.mask()

dfm = pd.DataFrame(np.arange(10))
dfm.mask(df[0] < 5,0)

>>>

   0
0  0
1  0
2  0
3  0
4  0
5  5
6  6
7  7
8  8
9  9

条件式がTrueなら、第2引数。 Falseならそれ自身が返っていることがわかります。

まとめ

ndarray.where(条件式, 2, 3) 条件式がTrueなら、第2引数。 Falseなら第3引数。

DataFrame.where(条件式, 2) 条件式がTrueなら、それ自身。 Falseなら第2引数。

DataFrame.mask(条件式, 2) 条件式がTrueなら、第2引数。 Falseならそれ自身。

以上です!