데이터/Data Manipulation

[1] Pandas query : 한 번만 써보자!

Cho et al. 2022. 5. 27.

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(exprinplace=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)

 

Plot by author

상당히 직관적이고, 무엇보다 & 를 쓰지 않아도 우리가 평소 수식에서 읽는 것 처럼 쓸 수 있어 조건을 명시하는 것이 수월하다.

 

 

이런 식으로 두개 조건을 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)

 

Plot by author

 

 

** 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)

 

댓글