Pandas에서는 특정 조건을 만족하는 데이터만 뽑아내기 위해 불리언 인덱싱(Boolean Indexing) 을 많이 사용합니다.
보통은 DataFrame 뒤에 대괄호([])를 붙여서 조건식을 넣지만, query() 함수를 사용하면 훨씬 더 간결한 코드를 작성할 수 있습니다.
기본 사용법
예를 들어 수입(income)이 5000 이상인 사람만 추출한다고 해볼까요?
일반적인 불리언 인덱싱:
loan_df[loan_df['income'] > 5000]
query() 사용:
loan_df.query('income" > 5000')
query()에서는 DataFrame 이름을 반복해서 쓰지 않고, 컬럼명만 바로 사용하면 됩니다.
변수와 함께 사용하기
조건에 변수를 넣을 때는 변수 앞에 @ 기호를 붙여야 합니다.
income_mean = loan_df['income'].mean()
loan_df.query('income > @income_mean')
평균보다 수입이 높은 사람만 추출
문자열 조건식
컬럼 값이 문자열일 때도 바로 사용할 수 있습니다.
loan_df.query("property_area == 'City'")
- 큰따옴표와 작은따옴표를 적절히 섞어 사용
- 컬럼명에 공백이 있으면 `property area` 처럼 백틱(`)으로 감싸기
in / not in 활용
리스트 조건도 쉽게 처리할 수 있습니다.
loan_df.query("property_area in [City, Suburb]")
loan_df.query("property_area not in [City, Suburb]")
여러 조건 결합
&, |, ~ 연산자를 그대로 쓸 수 있고, 괄호로 묶어주면 더 명확해집니다.
loan_df.query("(married == 'Y') & (income > @income_mean)")
정리
- query() 함수는 불리언 인덱싱을 더 간결하게 작성할 수 있는 방법
- 특히 조건식만 깔끔하게 작성 가능해서, SQL WHERE절과 거의 동일한 느낌
- @ 기호를 사용하면 외부 변수를 활용 가능
- 문자열, in / not in, 여러 조건 결합도 지원
- 다만, 대용량 데이터에서는 일반 불리언 인덱싱보다 속도가 약간 느릴 수 있음
👉 결국 [] 방식과 query() 방식은 결과가 동일합니다.
본인에게 더 편하고 가독성이 좋은 방식을 선택하면 됩니다!
'파이썬 > 데이터프레임 다루기' 카테고리의 다른 글
| Python에서 strftime과 strptime 정리하기 (0) | 2025.08.31 |
|---|---|
| Pandas에서 다양한 날짜·시간 데이터 다루기 (0) | 2025.08.31 |
| Pandas 불리언 인덱싱: 연산자 우선순위와 사용 규칙 (0) | 2025.08.30 |
| Pandas 불리언 인덱싱에서 괄호는 언제 써야 할까? (0) | 2025.08.30 |
| Pandas 그룹별 단일 값 매핑하기: CaseID별 CATEGORY 유일값 적용 (0) | 2025.04.18 |