특정문자가 포함되거나 일치하는 데이터(행)추출하기

생각하는 마리오네트·2022년 2월 3일
0

판다스

목록 보기
6/13

일을 하면서 특정한 값에 대해서 매핑을 하기위해 DB속의 데이터를 가져와서 매핑 컬럼을 추가해줄일이 있었다. 이때 원하는 조건의 값을 찾아서 해당하는 조건이 담긴 행에 매핑테이블을 붙여주었는데 이때 애용하게된 방법을 공유하고자 한다.(예시 데이터는 사내 데이터와는 무관하다.)

사용할 데이터 셋

  • 비디오게임 출고량 데이터셋

1. df['column'].str.contains()

먼저 우리가 "Platform" 컬럼에서 "DS"에 해당하는 값을 찾아서 해당값에 닌텐도라는 컬럼을 만들어 1이라는 값을 넣어주려고 한다. 이때 먼저 해야할 것이 바로 특정문자가 들어가는(or 일치하는) 값인 "DS"를 먼저 찾아야 한다.

dataset[dataset['Platform'].str.contains('DS', na = False)]

위와 같이 str.contains()를 활용하여 원하는 문자열을 갖는 데이터(행)을 찾을 수 있으며, 여기서 dataset은 해당 데이터프레임을 저장해둔 변수를 뜻하며 contains()안의 na파라미터는 nan값은 찾지않음을 뜻하는 파라미터 입니다.

이렇게 입력하면 다음과 같이 출력된다.

사진에서 보이는것 처럼 Platfrom에서 'DS'인것을 정확히 가지고 온 모습이다.

한가지 알아야 할 점은 str.contains()를 사용하면 정확히 해당 문자만 가지고 오는것이 아닌 해당문자를 포함한 것을 가져오기 때문에 "3DS" 가 해당 컬럼에 존재한다면 같이 불러오게 된다.

2. 복수개 포함시키기

앞에서는 하나의 단어를 포함시키는 방법을 알아봤으니 당연히 복수개를 어떻게 선택하는지 알아봐야 한다.

dataset[dataset['Platform'].str.contains('DS|PC', na = False)]

간단하게 위의 코드처럼 or연산자를 활용해서 DS 혹은 PC에 해당하는것을 불러올 수 있다. 하지만 이때 and는 연산자가 사용이 되지않아서 조금 다른 형태가 필요하다.

dataset[(dataset['Platform'].str.contains('DS', na = False)) & (dataset['Genre'].str.contains('Action',na=False))]

platform에는 두개가 들어간 경우가 없기때문에 platform과 genre 이렇게 두개의 컬럼을 동시에 만족하는 것으로 대체해 보았다. 이렇게 and를 쓰고싶으면 괄호를 사이에 두고 and 연산자를 사용하여 활용할 수 있다. 해당 코드의 결과물은 다음과 같다.

3. query 함수 사용하기

보통 쿼리라고 하면 "SQL"을 많이 떠올릴것이다. 모른다면 그냥 "명령"정도로 생각해보면 된다.

즉 "어떠한 조건에 맞는 값을 가져오도록 명한다." 정도 생각하면 된다.

바로 코드로 알아보자

dataset.query('Platform == "PC"')

플랫폼이 "PC"인 값을 출력해줘! 라는 것을 코드로 옮긴것으로 결과는 다음과 같이 나올것이다.

이렇게 출력을 하는 여러가지 방법에 대해 적어봤고 사실 contains는 https://velog.io/@ljs7463/판다스-특정-문자로-검색하는-str.contains 에서 다루었었지만 좀 더 다양하게 디테일 하게 다루고자 중복해서 다루어봤다.

오늘도 다같이 데분데분~~

profile
문제를해결하는도구로서의"데이터"

0개의 댓글