Python NumPy

NumPy 데이터 분석 - 조건에 따른 데이터 선택 (Boolean Indexing)

PyExplorer 2025. 2. 9. 10:49

NumPy 데이터 분석 - 조건에 따른 데이터 선택 (Boolean Indexing)

데이터 분석에서 대량의 데이터 중 원하는 조건에 맞는 데이터를 빠르게 선택하는 것은 매우 중요합니다. Python의 NumPy는 Boolean Indexing(부울 인덱싱)을 통해 이를 간단하면서도 효율적으로 처리할 수 있습니다. 이번 포스팅에서는 Boolean Indexing의 개념부터 실습 예제까지 함께 살펴보겠습니다.


Boolean Indexing이란?

Boolean Indexing은 배열에서 특정 조건을 만족하는 요소들만 선택하기 위해 사용되는 기법입니다. 조건문이 배열의 각 요소에 대해 평가되어 True/False로 이루어진 Boolean 배열을 생성하며, 이를 기반으로 원본 배열에서 데이터를 선택합니다.

이 기법은 대량의 데이터를 필터링하거나 전처리하는 과정에서 매우 유용합니다. 특히, pandas와 같은 고급 라이브러리로 넘어가기 전에 NumPy를 통해 Boolean Indexing의 기본을 확실히 이해해두는 것이 좋습니다.


Boolean Indexing의 기본 사용법

1. 배열 생성과 조건 평가

import numpy as np

# 배열 생성
arr = np.array([10, 15, 20, 25, 30])

# 조건에 따른 Boolean 배열 생성
condition = arr > 20
print(condition)  # [False False False  True  True]

위 코드에서는 arr > 20이라는 조건문이 배열의 각 요소에 대해 평가되어 Boolean 배열이 생성됩니다.

2. 조건에 따른 데이터 선택

# 조건을 기반으로 데이터 선택
selected_data = arr[condition]
print(selected_data)  # [25 30]

Boolean 배열 condition을 인덱스로 사용하여 조건에 맞는 값들만 선택할 수 있습니다.


다양한 조건 활용하기

NumPy는 단일 조건뿐만 아니라 여러 조건을 결합하여 사용할 수도 있습니다.

1. 논리 연산자 사용

  • & (AND): 두 조건이 모두 True인 경우
  • | (OR): 하나 이상의 조건이 True인 경우
  • ~ (NOT): 조건의 반대
# 배열 생성
arr = np.array([10, 15, 20, 25, 30])

# 여러 조건 결합
condition = (arr > 10) & (arr < 30)
print(condition)  # [False  True  True  True False]

# 데이터 선택
selected_data = arr[condition]
print(selected_data)  # [15 20 25]

# NOT 연산자 사용
condition_not = ~(arr > 20)
print(condition_not)  # [ True  True  True False False]

2. np.where를 활용한 조건 처리

np.where를 사용하면 조건에 따라 특정 값을 선택하거나 변환할 수 있습니다.

# 조건에 따라 값을 변환
transformed = np.where(arr > 20, arr, 0)
print(transformed)  # [ 0  0  0 25 30]

2차원 배열에서의 Boolean Indexing

Boolean Indexing은 다차원 배열에서도 동일하게 작동합니다.

1. 2차원 배열에서 조건 평가

# 2차원 배열 생성
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 조건 평가
condition = matrix > 5
print(condition)
# [[False False False]
#  [False False  True]
#  [ True  True  True]]

# 조건에 따른 데이터 선택
selected_data = matrix[condition]
print(selected_data)  # [6 7 8 9]

2. 행과 열 조건을 결합한 데이터 선택

# 조건을 결합하여 특정 행과 열의 데이터 선택
row_condition = np.array([True, False, True])  # 1행과 3행 선택
col_condition = np.array([False, True, True])  # 2열과 3열 선택

# 행 조건 적용
selected_rows = matrix[row_condition]
print(selected_rows)
# [[1 2 3]
#  [7 8 9]]

# 열 조건 적용
selected_cols = matrix[:, col_condition]
print(selected_cols)
# [[2 3]
#  [5 6]
#  [8 9]]

# 행과 열 조건 동시 적용
selected_data = matrix[row_condition][:, col_condition]
print(selected_data)
# [[2 3]
#  [8 9]]

Boolean Indexing의 실제 활용 사례

1. 결측치(NaN) 처리

# 결측치가 포함된 배열 생성
arr_with_nan = np.array([1, 2, np.nan, 4, np.nan, 6])

# 결측치 여부 확인
is_nan = np.isnan(arr_with_nan)
print(is_nan)  # [False False  True False  True False]

# 결측치 제거
cleaned_data = arr_with_nan[~is_nan]
print(cleaned_data)  # [1. 2. 4. 6.]

2. 특정 조건의 데이터 변환

# 데이터 변환 예제
arr = np.array([10, 15, 20, 25, 30])

# 20보다 큰 값은 그대로 두고, 나머지는 0으로 변환
transformed = np.where(arr > 20, arr, 0)
print(transformed)  # [ 0  0  0 25 30]

정리

Boolean Indexing은 NumPy의 강력한 기능 중 하나로, 대량의 데이터를 효율적으로 필터링하고 처리할 수 있도록 도와줍니다. 단일 조건뿐만 아니라 논리 연산자를 활용한 복합 조건, 2차원 이상의 배열 처리, 그리고 실제 데이터 분석에서 자주 사용하는 사례들까지 다양한 방식으로 활용할 수 있습니다.

데이터 분석을 시작하는 단계라면, NumPy의 Boolean Indexing을 충분히 연습하여 데이터 선택 및 변환 작업에 익숙해지는 것이 중요합니다.