Introduction
Pandas 를 사용하여 EDA 를 진행할 때,
import seaborn as sns
import matplotlib.pyplot as plt
import os
import numpy as np
import pandas as pd
iris = sns.load_dataset('iris')
iris 에서 sepal_length 가 5~6 사이인 row만 뽑고 싶을 때,
보통 이렇게 많이 쓴다.
iris[(iris.sepal_length>5) & (iris.sepal_length<6)]
하지만 이 방법은 대괄호도 많이 들어가고, 무엇보다 코드가 너무 길다.
pandas 에서 제공하는 메소드 중 query 라는 메소드가 있는데, 문법도 간단하고 쓰임새도 훨씬 좋을 것 같아서 정리해본다.
DataFrame.query(expr, inplace=False, **kwargs)
expr : 표현식. 조건을 나타낼 때 쓴다. column 명과 filtering 하고자 하는 조건이 들어가면 된다.
inplace : query 문을 통해 수정된 dataframe 으로 저장해서 계속 쓸 경우 True 로 설정
Application
위의 코드를 query() 를 이용해서 다시 써보면
iris.query('5 < sepal_length < 6')
이렇게 된다.
sns.set(font_scale = 2,style = 'white')
df = iris.query(('5 < sepal_length < 6')
sns.catplot(data = df , aspect=2)
상당히 직관적이고, 무엇보다 & 를 쓰지 않아도 우리가 평소 수식에서 읽는 것 처럼 쓸 수 있어 조건을 명시하는 것이 수월하다.
이런 식으로 두개 조건을 and 로 연결해주는 것도 가능하다.
sns.set(font_scale = 2,style = 'white')
df = iris.query(('5 < sepal_length < 6') and ('0 < petal_width < 1'))
sns.catplot(data = df,aspect=2)
** sns.catplot 은 Facet 기반의 plot 이라 plt.figure(figsize = (int a, int b)) 가 작동하지 않아, catplot 내의 aspect 나 height 를 조절해줘야 한다.
Reference
pandas.DataFrame.query — pandas 1.4.2 documentation (pydata.org)
'데이터 > Data Manipulation' 카테고리의 다른 글
[Pandas] Stratified sampling with pd.DataFrame.sample() (0) | 2022.10.13 |
---|---|
[6] Stratified K-fold 의 여러가지 방법 (0) | 2022.09.06 |
[4] Python list comprehension 써보기. (0) | 2022.05.29 |
[3] Pandas transform : lambda 대신 데이터프레임에 사용가능, 하지만 더 다양하게. (0) | 2022.05.29 |
[2] Pandas cut : 조건식 있는 loc 대신 쓸 수 있는 방법. (0) | 2022.05.29 |
댓글