본문 바로가기
프로그래밍/Python 관련 정보

[Pandas] Advanced Indexing - query

by 물박사의 저장공간 2025. 2. 23.

2025.02.24 - [프로그래밍/Python 관련 정보] - [Pandas] Table of Contents


이번 포스팅은 사실 저도 지금까지 사용해보진 않았는데 Pandas 내용을 정리할 겸 조사한 내용입니다. DataFrame의 값을 추출할 때 query 매서드를 활용할 수 있습니다. 사용하는 방법자체는 아래와 같이 굉장히 간단한 구조입니다. 

df.query("조건식")

 

import pandas as pd

df = pd.DataFrame({
    'A': [10, 20, 30, 40, 50],
    'B': ['apple', 'banana', 'cherry', 'date', 'elderberry']
})

# A가 20보다 크고 40 이하인 행 필터링
filtered_df = df.query("A > 20 and A <= 40")
print(filtered_df)
    A      B
2  30  cherry
3  40    date

 

 

query method의 기본 특성

(1) query() 내부에서 Python 연산자(==, !=, <, >, and, or, not) 사용가능

저번 포스팅에서 말씀드린 것처럼 Boolean Series 에는 기본적으로 Python 연산자를 곧바로 적용할 수 없습니다. 하지만 query 매서드를 사용하면 여기서 자유로워질 수 있습니다. 

 

(2) Python의 eval() 함수를 사용하여 조건식을 실행

df = pd.DataFrame({'A': [1, 2, 3, 4, 5]})

query_str = "A > 2"
print(df.query(query_str))  # query() 사용
print(df[eval("df['A'] > 2")])  # eval() 사용 (동일한 결과)

 

(3) identifier(식별자)를 사용하여 expr를 작성

칼럼 이름과 df.index를 identifier(식별자)로 사용

df.index 자체를 사용할 수도 있지만, index에 이름(df.index.name)이 있는 경우 그 이름 사용가능

df = pd.DataFrame({'A': [1, 2, 3, 4, 5]}, index=['a', 'b', 'c', 'd', 'e'])
df.index.name = 'row_name'  # Index 이름 설정

# index 이름을 활용한 query
print(df.query("row_name == 'b' or row_name == 'd'"))

 

(4) query() 내부에서는 Python 변수(외부 변수)를 직접 참조할 수 없으나 @변수명을 사용하여 참조

threshold = 30
filtered_df = df.query("A > @threshold")
print(filtered_df)

'프로그래밍 > Python 관련 정보' 카테고리의 다른 글

[Pandas] 데이터 재구조화  (0) 2025.02.23
[Pandas] Advanced Indexing - filter  (0) 2025.02.23
[Pandas] Advanced Indexing - Boolean vector  (0) 2025.02.23
[Pandas] fillna  (0) 2025.02.23
[Pandas] value_counts  (0) 2025.02.23