MLOps 부트캠프 by 한경+토스뱅크/Python

DataFrame - query() 함수 사용하기

나니니 2024. 8. 2. 17:27

query() 함수는 데이터 분석 라이브러리인 Pandas에서'DataFrame.query().' 메서드를 사용해 특정 조건을 만족하는 데이터를 쉽게 추출할 수 있다. 

기본 사용법 - 불린 인덱싱하기

query() 함수는 문자열로 표현된 조건식을 받아, 그 조건을 만족하는 데이터프레임의 행을 반환한다. 

이는 SQL의 'SELECT ... WHERE...' 절과 유사하게 동작한다. 

또, query() 함수를 사용한다면 보다 간결한 코드로 DataFrame에서 불린 인덱싱을 할 수 있다.

내부적인 작동 방식은 대괄호를 사용하여 불린 인덱싱을 하는 것과 거의 동일하지만, 데이터가 많은 경우 query() 함수를 쓴다면 속도가 조금 느려질 수 있다.

# 대출 신청자의 수입이 5,000 이상이다' 라는 조건식을 불린 인덱싱으로 할 때, 두가지 방법이 있음

# 1) DataFrame 에 조건식을 넣어줌
loan_df[loan_df['income'] > 5000]

# 2) query() 함수에 '' 또는 "" 안에 조건식을 넣어줌(*1) 과 동일_
loan_df.query('income > 5000')

조건식에 변수 사용하기

예를 들어 income_mean이라는 변수에 대출 신청자들의 수입 평균을 저장했다면, 아래와 같은 코드를 작성하여 해당하는 데이터를 뽑을 수 있다.

(* ⚠️ 이때 변수 앞에 @를 쓰지 않으면 오류가 나므로 주의!)

income_mean = loan_df['income'].mean()

loan_df.query('income > @income_mean')

 

조건식 안에 문자열 넣기 

'대출 신청자의 담보 부동산이 도시에 있다'를 의미하는 조건식을 사용하려면, 아래 코드처럼 큰 따옴표(")와 작은 따옴표(')를 함께 활용해야 합니다.

참고로, 컬럼명에 공백이 포함되어 있으면 컬럼명을 백틱(```)으로 감싸 주면 된다. 

loan_df.query("property_area == 'City'")

 

True나 False 값을 리턴하는 조건식 - in, not in 연산자

# in 연산자 사용하여 '포함'되는 데이터 추출
loan_df.query("property_area in ['City', 'Suburb']")

# not in 연산자 사용하여 '포함되지 않는' 데이터 추출
loan_df.query("property_area not in ['City', 'Suburb']")

query() 함수를 활용한 다중 조건

아래와 같이 and(&) 연산자를 사용해서 기혼 상태이고, 수입이 평균보다 많은 신청자들의 데이터를 뽑을 수 있고, not(~)이나 or(|) 연산자도 활용할 수 있다. 

#  and(&) 연산자 사용
loan_df.query("married == 'Y' & income > @income_mean")

# 조건식을 괄호()로 묶어 명확하게 표현함
# 	not(~) 연산자 사용하는 경우, 괄호로 조건식을 묶어주어 오류를 방지함
loan_df.query("(married == 'Y') & (income > @income_mean)")