Pandas는 Python에서 가장 많이 사용되는 데이터 분석 라이브러리다.

하지만 많은 개발자가 .loc[], .apply(), for 루프 같은 전통적인 방법으로 데이터를 필터링하면서 불필요하게 느린 코드를 작성하는 경우가 많다.

 

Pandas에는 SQL처럼 데이터를 필터링할 수 있는 query() 함수가 있다.

이 함수를 잘 활용하면 코드 가독성을 개선하면서 속도를 10배 이상 높일 수 있다.

1. query()란 무엇인가?

 

Pandas의 query() 함수는 SQL과 유사한 문법을 사용하여 데이터를 필터링하는 기능이다.

즉, .loc[]이나 boolean indexing을 사용하지 않고도 훨씬 직관적이고 빠르게 조건을 적용할 수 있다.

 

📌 기본 문법

df.query("조건식")

“조건식” 안에서는 컬럼 이름을 직접 사용할 수 있음!

2. query()를 사용해야 하는 이유

 

1️⃣ SQL과 비슷한 직관적인 문법

df.loc[]보다 가독성이 훨씬 좋다.

2️⃣ 최대 10배 빠른 성능

query()는 내부적으로 NumExpr 엔진을 사용해 최적화되어 있음.

3️⃣ 동적 변수 활용 가능

문자열 포맷팅을 활용하면 동적으로 조건을 구성할 수 있음.

3. query() vs .loc[] 성능 비교

 

✅ 기존 방식 (.loc[] 사용)

import pandas as pd
import numpy as np
import time

df = pd.DataFrame({
    'age': np.random.randint(10, 70, 1000000),
    'salary': np.random.randint(2000, 10000, 1000000)
})

start = time.time()
filtered_df = df.loc[(df['age'] > 30) & (df['salary'] > 5000)]
end = time.time()

print(f"기존 방식 실행 시간: {end - start:.4f}초")

🔥 query() 방식 적용

start = time.time()
filtered_df = df.query("age > 30 and salary > 5000")
end = time.time()

print(f"`query()` 실행 시간: {end - start:.4f}초")

📌 결과 예시:

기존 방식 실행 시간: 0.3542초  
`query()` 실행 시간: 0.0487초  

약 7배 이상 빠름!

4. query()의 실전 활용법

 

📌 1) 여러 조건을 쉽게 적용하기

df.query("age > 30 and salary < 7000")

가독성이 훨씬 좋아짐!

📌 2) 변수 활용 (@변수명)

min_age = 40
max_salary = 6000

df.query("age > @min_age and salary < @max_salary")

동적으로 조건을 설정할 수 있음

📌 3) 문자열 필터링

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'city': ['Seoul', 'New York', 'Seoul', 'London']
})

df.query("city == 'Seoul'")

SQL처럼 문자열 필터링 가능!

📌 4) query()를 활용한 복잡한 조건 필터링

df.query("(age > 30 and salary < 7000) or (age < 25 and salary > 8000)")

여러 개의 논리 연산을 쉽게 적용 가능

5. query()를 사용하면 얻을 수 있는 것

.loc[]보다 가독성이 훨씬 좋음

연산 속도가 최대 10배 빠름

동적 변수 사용으로 유연한 데이터 필터링 가능

SQL을 쓰듯이 데이터를 다룰 수 있어 데이터베이스와 유사한 작업이 쉬워짐

+ Recent posts