Pandas DataFrame의 열을 쿼리하려면 query() 메서드를 사용하면 됩니다. 이 메서드는 지정한 조건에 맞는 레코드만 필터링하여 추출할 때 매우 유용합니다. 먼저 예제에 사용할 Pandas DataFrame을 생성해 보겠습니다.
dataFrame = pd.DataFrame({"Product": ["SmartTV", "PenDrive", "Speaker", "Earphone"],"Opening_Stock": [300, 700, 1200, 1500],"Closing_Stock": [200, 500, 1000, 900]})위 DataFrame에는 제품명(Product), 기초 재고(Opening_Stock), 기말 재고(Closing_Stock) 세 개의 열이 포함되어 있습니다.
query()로 조건 설정하기
query() 메서드 안에 조건식을 문자열 형태로 전달하면 해당 조건을 만족하는 행만 반환됩니다. 아래 예제에서는 다음 세 가지 조건을 동시에 적용합니다.
- 기초 재고(Opening_Stock)가 500 이상일 것
- 기말 재고(Closing_Stock)가 1,000 미만일 것
- 제품명(Product)이 문자 "P"로 시작할 것
print(dataFrame.query('Opening_Stock >=500 & Closing_Stock < 1000 & Product.str.startswith("P").values'))문자열 조건을 적용할 때는 .str.startswith() 같은 문자열 메서드를 활용할 수 있으며, 이 경우 마지막에 .values를 붙여 NumPy 배열로 변환해 주면 query() 내부에서 정상적으로 동작합니다.
전체 예제 코드
다음은 위 내용을 모두 포함한 완성된 코드입니다.
import pandas as pd
dataFrame = pd.DataFrame({"Product": ["SmartTV", "PenDrive", "Speaker", "Earphone"],"Opening_Stock": [300, 700, 1200, 1500],"Closing_Stock": [200, 500, 1000, 900]})
print("DataFrame...\n", dataFrame)
# query()를 사용해 열 쿼리하기
print("\n조건에 맞는 레코드 필터링...\n")
print(dataFrame.query('Opening_Stock >=500 & Closing_Stock < 1000 & Product.str.startswith("P").values'))실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
DataFrame... Closing_Stock Opening_Stock Product 0 200 300 SmartTV 1 500 700 PenDrive 2 1000 1200 Speaker 3 900 1500 Earphone Querying columns to filter records... Closing_Stock Opening_Stock Product 1 500 700 PenDrive
결과 해석
출력 결과를 보면 네 개의 행 중 인덱스 1번 행인 PenDrive만 최종적으로 선택되었습니다. SmartTV는 기초 재고가 500 미만이고, Speaker는 기말 재고가 1,000 이상이며, Earphone은 제품명이 "P"로 시작하지 않기 때문에 각각 조건에서 제외된 것입니다. 이처럼 query()를 활용하면 복잡한 조건도 직관적인 문법으로 손쉽게 처리할 수 있습니다.