[Pandas] str.extract, str.contains 정규표현식 사용

반응형

From Pixabay Joseph Mucira's Image

안녕하세요

저번 포스팅에서 실무에 유용한 pandas의 4가지 기능에 대해 알아보았습니다.

 

엑셀로 부터 자유로워진다!! 유용한 pandas 기능 4 가지

안녕하세요 저번에 포스팅에서 pydataset라이브러리를 통해 dataset을 가져오는 것을 정리해보았습니다. 2020/07/23 - [python] - pydataset 이란? 700개 이상의 테스트 데이터 library pydataset 이란? 700개 이..

bio-info.tistory.com

이번엔 pandas에서 데이터 프레임의 열에 접근하여 정보를 추출하는 매우 유용한 기능에 대해 알아보겠습니다.

 

목차

1. 정규표현식이란?

2. str.extract()

3. str.contains()

 

1. 정규표현식이란?

정규 표현식이란 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리하기 위한 수단입니다.

파이썬에서 정규표현식은 보통 re라는 library와 r'문자'형태를 사용합니다.

 

아래 링크는 파이썬의 정규표현식을 쉽게 설명한 사이트입니다.

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

 

이번에 알아볼 방법은 re library없이 pandas에서 정규표현식을 이용해 특정한 조건을 만족하는 값을 추출하거나, 개수를 세는 쉬운 방법을 알아보겠습니다. 

 

2. str.extract()

다음과 같은 데이터 프레임이 있습니다. 

프랑스에서 온 데이터 프레임으로 담배와 알코올과 암과의 관계를 표현했다고 합니다.

사실 지금 하려고 하는 건, 무슨 내용인지와 상관없기 때문에 그냥 넘어가겠습니다.

 

위 그림에서 alcgp라는 열(컬럼)이 보입니다.

해당 열(컬럼)에 unique() 함수를 사용해서 해당 열(컬럼)이 어떤 유니크한 값들로 이루어져 있는지 보겠습니다.

 

살펴보니 '0-39g/day', '40-79', '80-119', '120+' 이렇게 4가지 값으로 이루어져 있는 것을 볼 수 있습니다.

 

그렇다면 이 컬럼에서 숫자 범위 정보만 가져오려면 어떻게 해야 할까요??

즉, 숫자-숫자숫자+ 정보만 가져오려고 합니다.

이걸 한 줄에 할 수 있는 게 바로 str.extract()입니다.

다음과 같은 코드를 사용했습니다.

 

1) 코드 설명

df['new'] = df.alcgp.str.extract(r'(\d+-\d\d+|\d\d\d\+)')

'new' 열을 새로 만들고, df에서 alcgp열str(문자열) 중에서 r'(\d-\d\d+|\d\d\d\+)'extract(추출)하여 'new' 열에 넣겠다는 의미

* 정규표현식 : r'(\d+-\d\d+|\d\d\d\+)' 

 

2) 정규표현식 : r'(\d+-\d\d+| \d\d\d\+)'  

 

\d+-\d\d+ : \d는 숫자를 의미합니다. +는 앞에 온 문자가 1번 이상 반복되는 것을 의미합니다.

즉, 숫자가 1번 이상 반복 - 숫자가 2번 이상 반복을 의미합니다.

 

\d\d\d\+ : \+는 +를 정규표현식으로 쓰지 않고, 그냥 문자 +로 쓰는 것입니다. 

즉, 숫자 3개에+가 있는 것을 의미합니다.

 

가운데에 있는 | or을 의미합니다.

즉, 앞의 정규표현식 \d+-\d\d+\d\d\d\+중에 하나라도 만족하면 extract(추출)하겠다는 의미입니다.

 

new 열의 고윳값(unique)들만 출력해보면 아래와 같이 원했던 데이터('0-39', '40-79', '80-119', '120+')

만 추출됐음을 확인할 수 있습니다.

 

3. str.contains()

이번엔 한 열에 특정 문자가 포함된 행이 몇 개인지 파악해보겠습니다.

아래 그림을 보면, tobgp열에 있는 값이 어떻게 이루어져 있는지 unique()를 통해 확인해 보았습니다.

4가지 값들로 이루어져 있습니다.

 

그중 'day'가 포함된 행은 총 몇 개인지 어떻게 파악할까요??

 

답은 str.contains() 함수를 이용해서 파악할 수 있습니다.

 

1) 코드 설명

df.tobgp.str.contains(r'(day)'))

df에서 tobgp열 문자열(str) 중 r'(day)'가 포함된(contains) 행이 몇 개인지 len함수를 통해 출력.

 

2) 정규표현식 : r'(day)'

day가 포함된 모든 문자열을 의미.

 

 

 

이렇게 이번 시간에는 pandas에서 정규표현식을 이용해 특정 열에서

특정 문자열을 추출(extract)하거나, 특정 문자열이 포함된(contains) 행이 몇 개인지 파악해보았습니다.

 

다음에 더 좋은 글로 찾아오겠습니다.
읽어주셔서 감사합니다.

 

* 위 코드와 실행 결과는 아래 깃허브에 정리되어있습니다.

 

 

netsus/pandas_practice

Pandas examples in practice. Contribute to netsus/pandas_practice development by creating an account on GitHub.

github.com

 

반응형

댓글

Designed by JB FACTORY