np.where( 조건, 조건이 True면 나올 값, else처럼 나머지 값)
ar = np.arange(9).reshape(3,3)
-> [[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]
* np.where(ar<4, -1, 999)
# ar의 값이 4보다 작으면 -1, 나머지는 999로
-> [[ -1, -1, -1],
[ -1, 999, 999],
[999, 999, 999]]
* np.where(ar<4, ar*10, ar-10) # 연산도 가능
-> [[ 0, 10, 20],
[30, -6, -5],
[-4, -3, -2]]
결측값(NaN)을 처리하는 방법
a = [[ 11. 12. 100. nan]
[ 21. 22. 23. 24.]
[ 31. 82. nan 34.]
[ nan 42. 43. 44.]]
* np.isnan(a) : 결손값을 True, False로 리턴
-> [[False False False True]
[False False False False]
[False False True False]
[ True False False False]]
* np.nan_to_num(a) : 결손값 전부 0으로 처리
-> [[ 11. 12. 100. 0.]
[ 21. 22. 23. 24.]
[ 31. 82. 0. 34.]
[ 0. 42. 43. 44.]]
* np.nan_to_num(a, nan = -1) : 결손값 전부 -1으로 처리
-> [[ 11. 12. 100. -1.]
[ 21. 22. 23. 24.]
[ 31. 82. -1. 34.]
[ -1. 42. 43. 44.]]
* np.nan_to_num(a, nan = np.nanmean(a))
# np.nanmean(a)는 결손값을 무시하고 평균을 구하는 함수
-> [[ 11. 12. 100. 37.61538462]
[ 21. 22. 23. 24. ]
[ 31. 82. 37.61538462 34. ]
[ 37.61538462 42. 43. 44. ]]
a = [[ 11. 12. 100. nan]
[ 21. 22. 23. 24.]
[ 31. 82. nan 34.]
[ nan 42. 43. 44.]]
* np.isnan(a).any(axis=1)
# axis=1 행을 축으로 isnan 결측값이 하나라도 있으면 True, 없으면 False
-> [ True False True True]
* np.isnan(a).any(axis=0)
# axis=0 열을 축으로 isnan 결측값이 하나라도 있으면 True, 없으면 False
-> [ True False True True]
* np.isnan(a).all(axis=1)
# axis=1 행을 축으로 isnan 모든 요소값이 결측값이면 True, 아니면 False
-> [False False False False]
* np.isnan(a).all(axis=0)
# axis=0 열을 축으로 isnan 모든 요소값이 결측값이면 True, 아니면 False
-> [False False False False]