[Pandas]특정문자로 찾기 str.contains()

반응형
    반응형

    데이터프레임의 데이터가 많으면 원하는 자료를 눈으로 찾기가 어려운데

    흔히 하는 찾기(ctrl+f)기능과 같은 역할을 하는 str.contains()를 소개하겠습니다.

     

    예제 자료는 국내의 etf 종목리스트입니다. 
    listing이라고 합시다.

    listing

    468개의 종목이 있지만 내가 원하는건 레버리지가 붙은 종목인데 찾을수가 없습니다.

    이럴 때 '레버리지' 만 가지고 종목을 찾아보고 싶을때 str.contains()을 씁니다.

     

    str.contains() 타입

    일단 str.contains()만 했을때 어떤 타입이 나오는지 확인해보겠습니다. 

    이 함수는 column을 대상으로 찾는 기능이므로 찾을 대상을 column으로 지정하고 해야합니다.

     

    listing['Name'].str.contains('레버리지')

    bool 형식으로 나오네요. 그럼 pandas는 조건부 검색기능이 있으니 찾을 수 있습니다.

     

     

    검색하기

    이제 레버리지를 검색해보겠습니다.

    listing[listing['Name'].str.contains('레버리지')]

     

    검색을 하면 다음과 같이 레버리지가 들어간 문자는 다 찾을 수 있습니다.

     

    대문자,소문자 구분 없애기

    str.contains()는 대문자, 소문자를 구분해서 검색을 해주는데 그 기능을 없앨 수 있습니다.

    파라미터에 caseFalse로 놓으면 됩니다.

    소문자로 KODEX 로 찾아보겠습니다. 

     

    먼저 case가 없으면 못 찾습니다.

    listing[listing['Name'].str.contains('kodex')]

    case=False로 놓으면 찾게됩니다.

    listing[listing['Name'].str.contains('kodex',case=False)]

     

    NaN 가 있을때

    자료에 NaN이 있으면 검색이 안됩니다.

    NaN을 True로 할지 False로 할지 선택을 해주면 되는데

    str.contains() 파라미터에 na가 있습니다. NaN를 True로 여길지 False로 여길지 입력해주면 됩니다.

    KODEX 레버리지를 NaN을 바꾸고 살펴보겠습니다.

    import numpy as np
    listing.loc[9,'Name']= np.nan
    listing.loc[9]

    레버리지로 찾게 되면 다음과 같이 오류가 뜨게 됩니다.

    listing[listing['Name'].str.contains('레버리지')]

     

    na=True로 해보면 다음과 같이 나옵니다.

    listing[listing['Name'].str.contains('레버리지',na=True)]

     

    na=True로 하면 NaN값을 True로 여기고 검색결과에 나오게 됩니다.

    na=False로 하게 되면 NaN은 빠지게 됩니다.

     

     

    관련 포스팅

    [Python/Pandas] - [Pandas] 원하는 값으로 필터링

    [Python/Pandas] - [Pandas] DataFrame 결측치(NaN) 처리

     

     

    댓글

    Designed by JB FACTORY

    ....