[Pandas] 데이터프레임 문자열 조건 검색법 총정리

반응형
    반응형

    판다스 데이터프레임 문자열 조건 검색법 총정리

    데이터프레임 문자열 조건 검색 방법을 모아봤습니다.

    일반적인 방법

    == 조건을 이용하는 방법이 가장 일반적입니다.

    import pandas as pd
    
    # 예제 데이터프레임 생성
    data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
                'Age': [24, 27, 22, 32],
                'City': ['New York', 'Los Angeles', 'Chicago', 'Miami']}
    df = pd.DataFrame(data)
    
    ## Los Angeles 찾기
    result_and = df[df['City'] == 'Los Angeles']
    print(result_and)

    하지만, ==을 사용하면 정확히 일치한 값만 가져오게 됩니다. Los Angeles에서 Los만 조건에 넣으면 아무것도 나오지 않습니다.

    부분 문자열으로도 일치하는 행을 찾고 싶다면 str을 이용합니다.

    str 이용하는 방법

    문자열 일부만으로 조건 검색을 하기 위해 str.contains('조건문자열')을 사용합니다.
    예를 들어 아래 데이터프레임에서 Los 이 들어가 있는 행을 찾으려면 다음과 같이 합니다.

    import pandas as pd
    
    
    data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
                'Age': [24, 27, 22, 32],
                'City': ['New York', 'Los Angeles', 'Chicago', 'Miami']}
    df = pd.DataFrame(data)
    
     # 특정 문자열을 포함하는 행 선택
        result_str = df[df['City'].str.contains('Los')]
        print(result_str)
    

    str은 보다 편하지만 특정 컬럼에서만 적용됩니다. 즉, 데이터프레임에는 없는 메쏘드이고 시리즈에서만 적용됩니다.

    컬럼을 특정하지 않고 데이터프레임전체를 대상으로 조건검색을 하려면 apply을 이용합니다.

    apply를 이용하는 방법

    apply는 함수를 데이터프레임에 적용시키는 역할을 합니다.
    함수를 문자열을 찾는 조건 검색용 함수로 만들어 apply에 적용합니다.

    # 문자열 검색을 위한 사용자 정의 함수
    def contains_string(row, search_str):
        for col in row.index:
            if isinstance(row[col], str) and search_str in row[col]:
                return True
        return False

    isinstance는 해당 컬럼이 문자열인지 확인후 search_str(특정문자열)을 각 컬럼에서 검색합니다.

    # 검색할 문자열
    search_str = 'New'
    
    # apply 메서드를 사용하여 조건에 맞는 행 필터링
    
    result = df[df.apply(contains_string, axis=1, search_str=search_str)]
    
    print(result)

    여러 문자열을 검색하고 싶다면 검색할 문자열을 리스트로 만들어 마찬가지 방법으로 합니다. 다만, 리스트에서 한개씩 꺼내서 확인해야하므로 for문이 추가됩니다.

    # 여러 문자열 검색을 위한 사용자 정의 함수
    def contains_any_string(row, search_str_list):
        for col in row.index:
            if isinstance(row[col], str):
                for search_str in search_str_list:
                    if search_str in row[col]:
                        return True
        return False
    
    # 검색할 문자열 목록
    search_str_list = ['New', 'Los', 'Chicago']
    
    # apply 메서드를 사용하여 조건에 맞는 행 필터링
    result = df[df.apply(contains_any_string, axis=1, search_str_list=search_str_list)]
    print(result)

     

    lambda를 이용한 방법

    위와 같이 apply를 사용하지만 함수를 사용하지 않고 lambda를 적용해 apply내에서 함수를 작성하는 방법입니다.
    위의 방법은 컬럼을 기준으로 했다면 lambda는 row를 직접 도는 방식으로 진행됩니다.

    import pandas as pd
    
    # 예제 데이터프레임 생성
    data = {
        'Column1': ['value1', '당기순이익', 'value3'],
        'Column2': ['value4', 'value5', 'full_profit'],
        'Column3': ['value7', 'value8', 'value9']
    }
    
    df = pd.DataFrame(data)
    
    # 조건에 맞는 행을 필터링
    result = df[df.apply(lambda row: any('당기순이익' in str(cell) or 'full_profit' in str(cell) for cell in row), axis=1)]
    
    # 결과 확인
    print(result)

    마치며

    문자열 검색방식에 대해 알아보았습니다. 규모와 상황에 따라 적합한 방법을 사용하는게 중요합니다. 너무 과도하게 코딩을 하면 메모리와 시간소비를 하게 되니 적절하게 사용하시길 바랍니다.

     

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

    [Pandas] 함수 적용하기(map,apply, applymap)

     

    댓글

    Designed by JB FACTORY

    ....