とある数値について、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