python/Pandas | Numpy
[Numpy] 슬라이싱, 마스킹, 조건 추출
Balang
2025. 5. 2. 15:13
728x90
데이터 분석은 "계산" 만큼이나 "필터링"이 중요합니다.
필요한 값을 빠르게 꺼내올 수 있어야,
- 이상치를 제거할 수 있고
- 특정 조건만 모델에 투입할 수 있으며
- 불필요한 데이터를 제거하고 속도를 높일 수 있습니다.
Numpy는 이를 위해 세 가지 강력한 도구를 제공합니다.
- 슬라이싱 (slicing) → 위치 기반 추출
- 마스킹 (masking) → 조건 기반 필터링
- 조건 추출 → 조건에 맞는 값만 걸러내기
기본 슬라이싱 문법
import numpy as np
arr = np.array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
3 X 3 정수 배열. 행과 열 기준으로 쉽게 부분 배열을 뽑을 수 있다.
행(row) 슬라이싱
arr[0] # → [10 20 30]
arr[:2] # → [[10 20 30], [40 50 60]]
- arr[0]: 첫 번째 행 전체
- arr[:2]: 처음 두 행
- Pandas의 .iloc[0]과 매우 유사한 개념이라고 보시면 됩니다.
열(column) 슬라이싱
arr[:, 1] # → [20 50 80]
arr[:, :2] # → [[10 20], [40 50], [70 80]]
- arr[:, 1]: 두 번째 열 전체
- arr[:, :2]: 앞의 두 열만 추출
슬라이싱은 위치 기반 추출에 최적화된 방식입니다.
반복문 없이 바로 접근 가능합니다.
조건으로 뽑기 (Boolean Masking)
arr = np.array([5, 10, 15, 20, 25])
mask = arr > 15
arr[mask]
- 조건을 만족하는 원소는 True, 아니면 False
- 그 결과를 배열에 전달하면 True인 값만 남는다
Pandas의 df[df['col'] > 10] 패턴과 동일한 논리
조건 한 줄로 쓰기 (AND / OR)
arr[(arr > 10) & (arr < 25)] # → [15 20]
- (arr > 10): 조건 1
- (arr < 25): 조건 2
- &: 논리적 AND (모두 만족)
반드시 조건마다 괄호를 붙여야 오류 방지
2차원 배열 조건 추출
a = np.array([[1, 2, 3],
[4, 5, 6]])
a[a > 3]
- a > 3: 동일한 shape의 mask 배열 생성
- 2차원 구조라도 조건 필터는 1차원 결과로 반환됨
이미지 / 행렬 / 테이블 구조에서 필터링 후 평균, 합계 등에 자주 사용
1. 예제: 음수만 제거
data = np.array([10, -5, 3, -2, 8])
cleaned = data[data >= 0] # → [10 3 8]
- 음수 데이터 제거 시 매우 간결하게 처리 가능
- 금융 데이터의 부정 수치 제거, 로그 연산 전 음수 제거 등에 자주 사용됨
- data = data[data >= 0] 처럼 바로 덮어쓰기 패턴을 많이 사용
2. 예제: 이미지나 행렬 처리 시 마스킹
img = np.array([
[255, 128, 64],
[ 0, 100, 50]
])
bright = img[img > 100] # → [255 128]
- 밝기 기준으로 특정 픽셀만 추출 가능
- 이미지 전처리, 머신러닝에서 특정 조건에 맞는 값만 추출해 분석할 때 필수
실수 및 오류 방지 팁
실수 | 설명 | 해결법 |
and, or 사용 | Python 내장 논리 연산자는 NumPy에서 사용 불가 | &, ` |
괄호 생략 | 조건 연산자 우선순위 문제로 오류 발생 | 조건마다 괄호로 감싸기 |
기대한 shape 아님 | 2D에서 조건 추출은 항상 1D 반환 | 후처리로 .reshape() 사용 가능 |
마무리 요약
개념 | 설명 | 예시 |
슬라이싱 | 위치 기반 추출 | arr[1:, :2] |
마스킹 | 조건 배열 → 필터링 | arr[arr > 5] |
조건 필터링 | 복수 조건 적용 | arr[(arr > 10) & (arr < 30)] |
NumPy는 단순한 수치 계산뿐 아니라,
데이터를 "선택"하고 "걸러내는" 데에도 매우 강력한 기능을 제공합니다.
이 기능을 익히면 Pandas나 Scikit-learn에서도 훨씬 직관적으로 조건을 걸 수 있습니다.
728x90
반응형