728x90
[Pandas] Query
Pandas에서 조건에 부합하는 데이터를 추출할 때, 가장 많이 사용하는 게 Query함수라고 한다.
가독성과 편의성은 좋지만, .loc[]로 구현한 것 보다 속도가 느리다.
query 함수를 사용하기 위해서 랜덤 데이터프레임을 생성해준다.
import pandas as pd
import names
from random import *
age = [randint(16, 19) for i in range(0, 101)]
gender = [choice(["male", "female"]) for i in range(0, 101)]
name = [names.get_first_name(gender=g) for g in gender]
cl = [choice(['A','B','C','D']) for i in range(0, 101)]
math = [randint(50, 100) for i in range(0, 101)]
english = [randint(50, 100) for i in range(0, 101)]
dic = {"age":age, "gender":gender, "name":name, "class":cl, "math":math, "english":english}
df = pd.DataFrame(dic)
비교 연산자 (==, >, >=, <, <=, !=)
컬럼명과 비교 연산자를 사용하여 비교를 할 수 있다.
단 컬럼명에 공백이 포함된 경우 백틱으로 감싸야 한다.
결과를 df에 바로 저장하고싶을 때, inplace=True 옵션을 사용하면 된다.
q = "age==19"
df = df.query(q) OR df.query(q, inplace=True)
in 연산자 (in, not in)
컬럼에 리스트 값이 하나라도 있으면 출력한다.
리스트[] 또는 튜플() 형태도 가능하다.
q = "name in ['Jessica','Joe']"
df.query(q, inplace=True)
논리 연산자 (and, or, not)
괄호를 이용하여 명확하게 우선순위를 지정하는게 좋다.
q = "(age == 17) and (math >= 90)"
df.query(q, inplace=True)
외부 변수 참조
외부 변수명 또는 함수 명 앞에 @를 붙여서 사용한다.
num_age = 18
q = "age == @num_age"
df.query(q, inplace=True)
문자열 부분 검색 (str.contains, str.starswith, str.endswith)
- 컬럼명.str.contains(비교문자열) : 문자열에 비교 문자열이 포함된 데이터를 찾는다.
- 컬럼명.str.startswith(비교문자열) : 특정 문자열로 시작하는 데이터를 찾는다.
- 컬럼명.str.endswith(비교문자열) : 특정 문자열로 끝나는 데이터를 찾는다.
df.query("name.str.contains('ae')", inplace=True)
df.query("name.str.startswith('A')", inplace=True)
df.query("name.str.endswith('n')", inplace=True)
참고
반응형
'👩💻 Develope > Python' 카테고리의 다른 글
[Python/Teams] Teams Webhook 메시지 보내기 (0) | 2023.12.06 |
---|---|
[Pandas] 데이터프레임 순회하기 (1) | 2023.11.30 |
[Python] 파이썬에서 다른 py 파일의 변수/함수 호출 (1) | 2023.11.22 |
[Python] plotly 사용하기 (1) Line 그래프 (0) | 2023.11.17 |
[Pandas] Group by (0) | 2023.11.15 |