Python/Pandas

특정 행(Row) 혹은 열(Column) 선택을 위한 Pandas 함수 - filter

찐남 2023. 5. 21. 00:05

빅데이터 분석을 수행할 때,

가장 기본이 되는 스킬 중 하나는

특정 조건을 만족하는 행(Row)만 추출하거나

특정 열(column)만 추출하는 것입니다.

 

이런 작업을 수행하는 데 필요한 여러 함수들을

파이썬에서 제공하고 있는데요.

 

이번 포스팅에서는

pandas내에 있는 filter함수에 대해서

알아볼게요.

 

 

pandas.DataFrame.filter

함수의 구문은 

DataFrame.filter(items=None, like=None, regex=None, axis=None)

  • items: list-like 
  • like: str
  • regex: str (regular expression)
  • axis{0 or ‘index’, 1 or ‘columns’, None}, default None 

으로 구성되어 있어요.

 

pandas 공식 라이브러리 문서에는

해당 구문의 설명을 아래와 같이 하고 있어요.

 

Subset the dataframe rows or columns

according to the specified index labels.

Note that this routine does not filter a dataframe on its contents.

The filter is applied to the labels of the index.

<출처:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.filter.html>

 

번역해 보면,

 

"인수로 지정된 인덱스 라벨에 따라

데이터 프레임 행(row) 또는 열(column)을 부분 집합화

하는 함수" 정도로 이해할 수 있는데요.

 

잘 와닿지가 않아요.

 

예시 데이터를 생성하고,

이를 이용해서 설명해 볼게요.

 

그러면, 

더욱 이해가 잘 되실 거라고 믿어요.

 

 

filter 함수를 사용하기 위한 예시 데이터 생성

 

import pandas as pd
import numpy as np

creditData = pd.DataFrame(np.array((
[1, 2, 3, 10, 20, 30], 
[4, 5, 6, 40, 50, 60], 
[4, 5, 6, 70, 80, 90], 
[4, 5, 6, 100, 101,102])),index=['2020.01', '2020.02', '2020.03','2020.04'],columns=['card1', 'card2', 'card3', 'loan1', 'loan2', 'loan3'])

creditData 

행(row)은 시점을 의미합니다

(2020.01: 2020년 1월 말, 2020.02: 2020년 2월 말,...).

 

열(columns)은 신용데이터입니다.

  - card1: 1번 신용카드 실적데이터

     ...

  - loan3: 3번 대출금액

 

특정 열(column) 추출하기

특정 열(column)을 추출하기 위해서는

DataFrame.filter 함수의

items 인수 혹은 regex 인수를 활용할 수 있어요.

 

1) item 인수 활용하기

car1 열(column)과 loan1 열(column)만 추출

# 칼럼명으로 열 선택
creditData.filter(items=['card1', 'loan1'])

 

쉽죠? 쉽습니다.

 

추출하고자 하는 열(column)의 개수가 몇 개 안 되면,

위의 방법을 활용하면 됩니다.

 

하지만, 추출하고자 하는 변수가 

100개, 200개, 300개 라면,....

 

위의 방법을 활용하려면

list에 추출하고자 하는 모든 열(column)을 나열해 주어야 합니다.

 

creditData.filter(items=['card1', 'card2', 'card3', 'card4', 'card5',.....])

와우~~~~~

이걸 언제 다 코딩하죠?

 

좀 더 효율적인 방법을 찾아야 합니다.

 

이러한 문제를 해결해 줄 수 있는 인수가 있어요!!!바로 regex 인수입니다.

 

2) regex 인수 활용하기

 regex는 regular expression(정규표현식)을 의미합니다.정규표현식은 내용이 너무 방대해서별도 포스팅에서 논의하기로 하고요.여기서는 자주 사용하는 몇 가지 정규표현식을 이용해서특정 열(column)만 추출해 볼게요.

 

case1) 'card'로 시작하는 모든 열 선택하기

creditData.filter(regex = '^card', axis=1) 

case2) '3'으로 끝나는 모든 열 선택하기

creditData.filter(regex='3$', axis=1)

case3) 'loan' 으로 시작하거나 '3'으로 끝나는 모든 열 선택하기

creditData.filter(regex='^card|3$', axis=1)

 

특정 행(row) 추출하기

특정 행(row)을 추출하기 위해서는

DataFrame.filter 함수의

like 인수 혹은 regex 인수를 활용할 수 있어요.

 

1) like 인수 활용하기

2020년 4월 말 데이터만 추출해 볼게요.

# 특정 문자열을 포함하는 행 선택
creditData.filter(like = '04' , axis = 0)

 

만약, 2020년 3월 말 데이터와 2020년 4월 말 데이터를 

가져오고 싶다면?

 

like인수로는 수행할 수 없어요.

위에서 설명드린 regex 인수를 사용하셔야 합니다.

 

2) regex 인수 활용하기

2020년 3월말 데이터와 2020년 4월말 데이터를

추출해 볼게요.

creditData.filter(regex = '03$|04$' , axis = 0)

 

이상 pandas 라이브러리에서 제공하는

filter 함수를 이용해서

특정 행(row) 혹은 열(column)을 

추출하는 방법에 대해서

살펴보았습니다.

 

데이터 분석을 수행하시면서,

많은 도움이 되셨으면 합니다.^^

 

 

반응형