np.whereとdf.whereの違い
当たり前ですが、
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ならそれ自身。
以上です!