미취학 아동은 0으로 변경 : np.where()

30 P
QUESTION 08 #306
넘파이 배열에서 8세 미만(미취학 아동)인 요소를 찾아 모두 0으로 변경하려고 합니다. 빈칸을 채워보세요.
main.py
import numpy as np

age = np.array([3, 55, 10, 22, 6, 30, 7, 5])

# 8세 미만은 0으로 변경, 나머지는 그대로 유지
# 사용법: np.함수명(조건, 참일_때_값, 거짓일_때_값)
age2 = np.(age < 8, 0, age)

print("결과:", age2)
실행 결과 예시
결과: [ 0 55 10 22  0 30  0  0]
INTERACTIVE SHELL Shift + Enter 로 즉시 실행

np.where()로 특정 값 치환하기

np.where()는 조건을 만족하는 요소만 골라서 값을 바꾸고, 나머지는 원래 값을 유지할 수 있습니다.

코드 분석

age = np.array([3, 55, 10, 22, 6, 30, 7, 5])
age2 = np.where(age < 8, 0, age)
인자 설명
조건 age < 8 8세 미만인가?
참일 때 0 0으로 변경
거짓일 때 age 원래 값 유지

동작 과정

원본:  [3,  55, 10, 22, 6,  30, 7,  5 ]
조건:  [T,  F,  F,  F,  T,  F,  T,  T ]  ← age < 8
결과:  [0,  55, 10, 22, 0,  30, 0,  0 ]
         ↑               ↑       ↑   ↑
      8미만 → 0으로 변경

활용 패턴

# 패턴 1: 특정 조건의 값만 변경, 나머지 유지
np.where(조건, 새로운값, 원본배열)

# 패턴 2: 이상값(Outlier) 처리
data = np.array([10, 20, 999, 30, 15])
clean = np.where(data > 100, 0, data)
# 결과: [10, 20, 0, 30, 15]

# 패턴 3: 음수를 0으로 변환
arr = np.array([-5, 3, -2, 7])
np.where(arr < 0, 0, arr)
# 결과: [0, 3, 0, 7]

💡 핵심: 거짓일 때 값에 원본 배열을 넣으면 조건을 만족하는 요소만 변경할 수 있습니다.