[Pandas] query() (loc보다 더 깔끔하게 조건 필터링)

2025. 4. 24. 11:23·python/Pandas | Numpy
728x90

Pandas의 조건 필터링은 기본적으로 df[(조건)] 형태를 사용하지만,
조건이 복잡해질수록 &, |, 괄호가 난무하면서 코드가 길어지고 가독성이 떨어진다.

이때 query()는 마치 SQL의 WHERE절처럼 사용할 수 있어 코드를 간결하게 정리해준다.

 

예제 데이터

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'age': [25, 32, 40, 28, 35],
    'score': [88, 92, 85, 70, 91],
    'membership': ['basic', 'premium', 'basic', 'basic', 'premium']
})


1. 예제 단일 조건 필터링

df.query('age > 30')

→ age가 30을 초과하는 사람만 추출

 

2. 예제 복수 조건 필터링

df.query('age > 30 and score >= 90')

→ age > 30이고, score >= 90인 사람

and, or 사용 시 괄호 안 써도 됨 → & , | 보다 깔끔!

 

3. 예제 문자열 비교

df.query('membership == "premium"')

→ membership이 'premium'인 행만 필터링

 

4. 예제 변수 사용 - @변수명

threshold = 85
df.query('score >= @threshold')

→ 외부 변수 threshold를 조건에 넣을 수 있음

 

5. 예제 문자열 포함 조건

df.query('name.str.contains("a")', engine='python')

→ str.contains() 등 문자열 메서드는 engine='python' 필요

 

6. 예제 isin 조건

df.query('membership in ["basic", "premium"]')

→ isin() 대신 in 연산자로 간단하게 필터링 가능

 

7. 예제 조건 필터링 후 특정 컬럼만 보기

df.query('age > 30')[['name', 'score']]

→ SQL의 SELECT처럼 결과 컬럼도 지정 가능 (query는 조건만 필터함)


주의사항

주의점 설명
변수는 반드시 @ 붙이기 query('score >= @x')
문자열 비교는 큰따옴표 사용 == "basic"
문자열 함수는 engine='python' 필요 str.contains(), str.startswith() 등
컬럼명에 공백/특수문자 있으면 백틱(`)으로 감싸기 df.query("user id > 1000")

활용 예제: 상위 조건 + 외부 변수

limit_age = 30
df.query('age >= @limit_age and membership == "premium"')

→ 나이가 30 이상이면서 premium 멤버인 사람 필터링

 

 

query()는 단순히 필터링 문법을 짧게 만드는 수준을 넘어,
SQL 스타일로 조건을 명확히 표현할 수 있는 고급 기능이다.
복잡한 조건을 명확하게 작성하고, 외부 변수와 함께 유연하게 사용하려면 반드시 익혀야 할 함수다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'python > Pandas | Numpy' 카테고리의 다른 글

[Pandas] explode() (리스트가 들어있는 셀 행마다 분해)  (1) 2025.04.24
[Pandas] eval() (열 간 수식을 짧고 빠르게 처리)  (0) 2025.04.24
[Pandas] filter()  (0) 2025.04.24
[Pandas] 조건 조합 필터링 및 추출  (0) 2025.04.24
[Pandas] 데이터 타입 확인 및 변환 – dtypes, astype()  (0) 2025.04.24
'python/Pandas | Numpy' 카테고리의 다른 글
  • [Pandas] explode() (리스트가 들어있는 셀 행마다 분해)
  • [Pandas] eval() (열 간 수식을 짧고 빠르게 처리)
  • [Pandas] filter()
  • [Pandas] 조건 조합 필터링 및 추출
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (146)
      • python (45)
        • selenium (4)
        • algorithm (9)
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (29)
      • Data Scientist (3)
      • Data Analysis (9)
      • Computer Science (35)
      • Why? (15)
      • 마음가짐 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
[Pandas] query() (loc보다 더 깔끔하게 조건 필터링)
상단으로

티스토리툴바