とある数値について、0.0〜1.0の間にいて欲しいのに-0.1とか1.1みたいな値が混ざっていた場合。
# マイナスや1.0を超えた値が混ざる適当なDataFrameをでっち上げる
df = pd.DataFrame(1.3 * np.random.random([5, 2]) - 0.2, columns=['A', 'B'])
#=> A B
#=> 0 0.418959 0.127008
#=> 1 0.766270 0.939455
#=> 2 1.019421 -0.193150
#=> 3 0.802732 0.909558
#=> 4 0.197882 -0.067508
これを1.0以上だったら1.0に、0以下だったら0.0に変換したい。
これまで適当にこんな風に書いていた。
np.fmin(1.0, np.fmax(0.0, df))
どう考えても良い書き方とは思えないので調べたら、np.clipという関数が出てきた。引数に配列、min、maxの3つを指定することで範囲内に収められるらしい。
np.clip(df, 0.0, 1.0)
#=> A B
#=> 0 0.418959 0.127008
#=> 1 0.766270 0.939455
#=> 2 1.000000 0.000000
#=> 3 0.802732 0.909558
#=> 4 0.197882 0.000000