이번 포스팅에서는 Python pandas DataFrmae에서 filter() 함수를 사용하여 특정 조건에 맞는 칼럼이나 행을 선택해서 가져오는 방법을 소개하겠습니다. 

 

(1) pd.DataFrame.filter() 함수의 items 옵션을 사용하여 '이름'으로 행이나 열을 선택해서 가져오기 

(2) pd.DataFrame.filter() 함수의 regex 옵션을 사용하여 '정규 표현식'으로 행이나 열을 선택해서 가져오기

(3) pd.DataFrame.filter() 함수의 like 옵션을 사용하여 '특정 문자를 포함'하는 행이나 열을 선택해서 가져오기

 

 

pandas.DataFrame.filter()

 

 

먼저 예제로 사용할 간단한 DataFrame을 만들어보겠습니다. 

 

## sample pandas DataFrame

import numpy as np
import pandas as pd

df = pd.DataFrame(
    np.arange(12).reshape(3, 4), 
    index=['abc', 'bbb', 'ccc'], 
    columns=['x_1', 'x_2', 'var1', 'var2'])
    

df

#      x_1  x_2  var1  var2
# abc    0    1     2     3
# bbb    4    5     6     7
# ccc    8    9    10    11

 

 

 

(1) pd.DataFrame.filter() 함수의 items 옵션을 사용하여 '이름'으로 행이나 열을 선택해서 가져오기

 

(1-1) pd.DataFrame.filter(items = ['칼럼 이름 1', '칼럼 이름 2', ...], axis=1) 옵션을 사용해서 '특정 칼럼 이름'의 데이터를 선택해서 가져올 수 있습니다. 칼럼 이름은 리스트 형태 (list-like) 로 나열해줍니다. axis 의 디폴트 옵션은 axis = 1 로서 칼럼 기준입니다. 

참고로, 일상적으로 많이 사용하는 df[['칼럼 이름 1', '칼럼 이름 2', ...]] 와 같습니다.  

 

## pd.DataFrame.filter()
## : Subset the dataframe rows or columns according to the specified index labels.
## reference: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.filter.html

## (1-1) items: select columns by name
## equivalently: df[['x_1', 'var2']]
df.filter(items=['x_1', 'var2'], axis=1)

#      x_1  var2
# abc    0     3
# bbb    4     7
# ccc    8    11

 

 

 

(1-2) pd.DataFrame.filter(items = ['열 이름 1', '열 이름 2', ...], axis=0) 옵션을 사용해서 '특정 열 이름'의 데이터를 선택해서 가져올 수 있습니다. 

참고로, 자주 사용하는 df.loc[['열 이름 1', '열 이름 2', ...]] 와 같습니다. 

 

## (1-2) items: select rows by name
## equivalently: df.loc[['bbb', 'abc']]
df.filter(items=['bbb', 'abc'], axis=0)

#      x_1  x_2  var1  var2
# bbb    4    5     6     7
# abc    0    1     2     3

 

 

 

(2) pd.DataFrame.filter() 함수의 regex 옵션을 사용하여 '정규 표현식'으로 행이나 열을 선택해서 가져오기

 

DataFrame.filter() 함수의 힘은 정규 표현식(regular expression)을 사용해서 행이나 열을 선택할 수 있다는 점입니다. 정규 표현식은 너무 광범위해서 이 포스팅에서 세부적으로 다루기에는 무리구요, 아래에는 정규 표현식의 강력함에 대한 맛보기로 세 개의 예시를 준비해봤습니다. 

 

 

(2-1) 정규 표현식을 이용해서 특정 문자로 시작(^)하는 모든 칼럼 선택해서 가져오기: regex='^(특정문자).+'

 

## (2) select columns by regular expression
## (2-1) 'x_' 로 시작하는 모든 칼럼 선택
## 캐럿 기호 ^는 텍스트의 시작, 
df.filter(regex='^(x_).+', axis=1)

#      x_1  x_2
# abc    0    1
# bbb    4    5
# ccc    8    9

 

 

(2-2) 정규 표현식을 이용해서 특정 문자로 끝나는($) 모든 칼럼 선택해서 가져오기: regex='특정문자$'

 

## (2-2) '2' 루 끝나는 모든 칼럼 선택
## 달러 기호 $는 텍스트의 끝
df.filter(regex='2$', axis=1)

#      x_2  var2
# abc    1     3
# bbb    5     7
# ccc    9    11

 

 

(2-3) 정규 표현식을 이용해서 특정 문자로 시작하지 않는 모든 칼럼 선택해서 가져오기: regex='^(?!특정문자).+'

 

## (2-3) 'x_' 로 시작하지 않는 모든 칼럼 선택
df.filter(regex='^(?!x_).+', axis=1)

#      var1  var2
# abc     2     3
# bbb     6     7
# ccc    10    11

 

 

(2-4) 정규 표현식을 이용해서 행 이름의 끝에 특정 문자를 포함하는 행(row)을 선택하기
            : DataFrame.filter(regex='특정문자$', axis=0)

 

## select rows(axis=0) containing 'c' at the end using regular expression.
df.filter(regex='c$', axis=0)

#      x_1  x_2  var1  var2
# abc    0    1     2     3
# ccc    8    9    10    11

 

 

 

(3) pd.DataFrame.filter() 함수의 like 옵션을 사용하여 '특정 문자를 포함'하는 행이나 열을 선택해서 가져오기

 

(3-1) 특정 문자를 포함하는 칼럼(column)을 선택해서 가져오기: df.filter(like='특정 문자', axis=1)

 

## (3) filter(like) 
## select columns(axis=1) containing 'x_'
df.filter(like='x_', axis=1)

#      x_1  x_2
# abc    0    1
# bbb    4    5
# ccc    8    9

 

 

(3-2) 특정 문자를 포함하는 행(row)을 선택해서 가져오기: df.filter(like='문정 문자', axis=0)

 

## select rows(axis=0) containing 'b' in a string
df.filter(like='b', axis=0)

#      x_1  x_2  var1  var2
# abc    0    1     2     3
# bbb    4    5     6     7

 

 

[Reference]

pandas.DataFrame.filter(): https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.filter.html

 

 

이번 포스팅이 많은 도움이 되었기를 바랍니다. 

행복한 데이터 과학자 되세요!  :-)

 

728x90
반응형
Posted by Rfriend
,