Python -[Pandas] 조건 검색하기 (query함수)

컴퓨터/Python

728x90
반응형

서론

Pandas를 통해 여러 정보를 정제하였다면 이제 원하는 데이터를 분석할 수 있어야 합니다.

원하는 조건들을 설정하고 정리된 수많은 데이터들 중에서 필요한 데이터를 추출할 수 있어야 합니다.

본문에서는 Pandas로 정제된  DataFrame안에서 특정 조건을 만족하는 결과를 추출하기 위한 방법에 대해서 알아보도록 하겠습니다.

 

. query 함수

Pandas에서 가장 많이 사용하는 query함수는 정제된 데이터에서 특정 조건을 만족하는 결과를 추출하기 위해 사용합니다.

DB를 다뤄보셨다면 조금 더 친숙할 수 있는 개념입니다. 

 

문자열의 형태로 조건을 보내기 때문에 가독성과 편의성이 뛰어나다는 장점이 있습니다.

해당 함수는 아래와 같은 기능으로 조건을 형성할 수 있습니다.

기능 설명 표현 방법
비교 연산 ==,  >, >=, <, <=, !=
in 연산 (포함) in, not in
논리 연산 and, or, not
외부 변수 또는 참조 연산 @
인덱스 검색 index 또는 index이름
문자열 부분 검색 문자열 함수르르 이용(contains,startswith,endswith..)

 

해당 기능들을 문자열의 형태로 호출하면 손쉽게 결과를 얻을 수 있습니다.

특정 DataFrame에 가격이 있다고 가정하고 가격이 5000원 이하인 결과를 추출한다고 가정해 봅시다.

#df는 데이터가 정리된 DataFrame
Stringquery = "Price  <= 5000"

Result = df.query(Stringquery)
print(Result)

 

예제 - 준비

이제 각각의 기능들을 예제를 통해 알아보도록 합시다. 

우선, 아래와 같은 DataFrame이 존재한다고 가정하겠습니다.

import pandas as pd


data = {"Date":[2019,2020,2021,2022],
        "Price":[3000,4000,5000,6000],
        "Location":["인천","서울","제주도","부산"]}

df = pd.DataFrame(data)

 

예제 1 - 비교 연산

비교 연산자들을 이용해서 문자열을 만들어서 결과를 얻어낼 수 있습니다.

Stringquery = "Price  <= 5000"
Result = df.query(Stringquery)
print(Result)

예제  2 - in연산

in연산은 포함 여부를 통해 조건을 형성합니다.

Stringquery = "Location in '인천'"
Result = df.query(Stringquery)
print(Result)

in에 들어오는 인자는 리스트나 튜플의 형태 또한 가능합니다.

Stringquery = "Location in ['인천','서울']"
Result = df.query(Stringquery)
print(Result)

예제 3 - 논리 연산

논리적 연산 또한 지원합니다. 여러 개의 조건들을 조합할 때 유리합니다.

Stringquery = "Price <= 4000 or Location in ['부산']"
Result = df.query(Stringquery)
print(Result)

예제 4 - 외부 변수 또는 함수의 참조 연산

문자열의 형태로 query를 형성하기 때문에 소스코드상에서 이용되는 변수들을 사용하는 것에 제약조건이 발생합니다.

이를 극복하기 위해 문자열에서 함수 또는 외부 변수를 인식하기 위해 @ 를 사용합니다.

MyLocation = '제주도'

Stringquery = "Location == @MyLocation"
Result = df.query(Stringquery)
print(Result)

예제 5 - 인덱스 검색

DataFrame에는 index가 존재합니다 index를 통해서도 데이터를 추출할 수 있습니다.

인덱스명을 따로 지정하지 않았다면 아래와 같이 사용하면 됩니다.

Stringquery = "index == 2"
Result = df.query(Stringquery)
print(Result)

예제 6 - 문자열 함수 이용

문자열 함수를 이용해서 특정 문자로 시작, 끝나는 문자 등 다양한 조건을 입력하여 사용 또한 가능합니다.

Stringquery = "Location.str.startswith('서')"
Result = df.query(Stringquery)
print(Result)

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :