파이썬을 활용한 데이터 분석 입문

[Python]데이터 전처리 - 데이터 인덱싱(2) 불린 인덱싱과 query

엔피디 2024. 8. 8. 18:46

 

이번 포스팅에서는 특정 조건을 만족하는 영역을 선택하는 불린 인덱싱과 이를 수월하게 해주는 명령어 query의 사용법을 알아보겠습니다.


불린 인덱싱(Boolean Indexing)

불린 인덱싱은 특정 조건을 만족하는 데이터 요소들을 필터링(필요한 데이터만 남기기)하는 방법입니다. 불린 인덱싱은 주로 배열이나 데이터프레임과 같은 데이터 구조에서 사용되며, 다음과 같은 과정을 거치는 것이 좋습니다.

 

조건 생성

선택할 데이터의 기준인 불린 조건을 생성합니다. 예를 들어, 배열의 요소가 특정 값보다 큰지, 문자열이 특정 변수와 일치하는지 등을 판단하는 조건이 있습니다.

 

예시 조건 : 수학 점수가 80점 이상인 학생

 

불린 배열 생성

조건식을 적용하여 원본 데이터와 동일한 크기의 불린 배열(True/False 값을 갖는 배열)을 생성합니다. True는 조건을 만족하는 요소를, False는 조건을 만족하지 않는 요소를 나타냅니다.

condition1 = midterm['math'] >= 80
condition1

 

다음과 같이 조건을 condition 변수에 저장하여 사용하면 코드의 가독성을 높일 수 있습니다.

 

데이터 필터링

생성된 불린 배열을 사용하여 원본 데이터에서 조건을 만족하는 요소만 선택합니다.

filtered_df = midterm[condition1]
filtered_df

 

다음과 같이 수학 점수가 80점 이상인 학생들의 데이터만 출력된 것을 확인하실 수 있습니다.


다중 조건 불린 인덱싱(Boolean Indexing-Multiple Conditions)

다중 조건 불린 인덱싱은 여러 조건을 결합하여 데이터를 필터링하는 방법입니다. 이를 통해 보다 복잡하고 정교한 기준에 따라 데이터를 선택할 수 있습니다. 다중 조건 불린 인덱싱은 주로 AND, OR, NOT 등의 논리 연산자를 사용하여 조건을 결합합니다.

논리 연산자

논리 연산자 문자
and & 앰퍼샌드(Ampersand)
or | 버티컬 라인(Vertical bar)
not ~

 

논리연산자는 참(True)과 거짓(False) 값을 가지는 불린(Boolean) 값을 결합하거나 비교하는 연산자입니다. Python에서 논리연산자는 주로 조건문에서 사용되며, 여러 조건을 동시에 평가하거나 특정 조건을 반전시키는 데 사용됩니다. 주요 논리연산자로 AND, OR, NOT이 있습니다.

AND

A B A & B
True True True
True False False
False True False
False False False
  • AND (&) : 두 조건이 모두 참일 때만 참을 반환합니다.

OR

A B A | B
True True True
True False True
False True True
False False False
  • OR (|) : 두 조건 중 하나라도 참이면 참을 반환합니다.

NOT

P ~P
True False
False True
  • NOT (~) : 조건의 참과 거짓을 반전시킵니다.

다중 조건 불린 인덱싱도 마찬가지로 다음과 같은 절차를 거치는 것이 좋습니다.

 

조건 생성

예시 조건 : 국어 점수가 60점 이상이면서 영어점수가 90점 이상인 학생

 

불린 배열 생성

condition1 = midterm['korean'] >= 60
condition2 = midterm['english'] >= 90

# 국어 점수가 60점 이상이면서 영어점수가 90점 이상인 학생
condition1 & condition2

 

데이터 필터링

filtered_data = midterm[condition1 & condition2]
filtered_data

 

다음과 같이 국어 점수가 60점 이상이면서 영어점수가 90점 이상인 학생 학생들의 데이터만 출력된 것을 확인하실 수 있습니다.

query

query는 데이터프레임에서 SQL과 유사한 구문을 사용하여 데이터를 필터링하는데 사용됩니다. 이 명령어를 사용하면 복잡한 조건에 따라 데이터를 쉽게 선택할 수 있습니다. 특히 큰 데이터프레임에서 조건을 적용하여 행을 선택할 때 매우 유용합니다. 

사용방법

데이터프레임.query(’조건문’)

 

앞서 불린 인덱싱으로 실습한 데이터를 query를 이용하여 작성해보겠습니다.

midterm.query("math >= 80")

midterm.query("(korean >= 60) & (english >= 90)")

 

여러 조건이 함께 있을 때 괄호로 묶어 조건을 명확하게 하는 것이 좋습니다. 또한 연산의 우선순위를 바꿀 때도 괄호를 사용할 수 있습니다.

외부 변수 사용하기

# 수학 평균 점수보다 높은 학생 데이터 추출하기
math_mean = midterm['math'].mean()
math_mean
59.5
midterm.query("math > @math_mean")

 

조건식에 외부 변수를 사용할 때 @문자를 앞에 작성해야 합니다. (작성하지 않을 시 오류 발생)

문자 변수 사용하기

midterm.query("name == '철수'")

 

조건식에 문자 변수를 사용할 때 따옴표(” ” 또는 ‘ ’)를 작성해야 합니다. (작성하지 않을 시 오류 발생)

 


 

이번 포스팅에서는 불린 인덱싱 query를 통해 특정 조건에 맞는 데이터를 추출하는 방법에 대해 알아보았습니다. 앞으로 계속 사용할 명령어이기 때문에 익숙해지시면 좋을 것 같습니다.