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
반응형