본문 바로가기
공부 목록/IT & 프로그래밍

파이썬 데이터 프레임의 값 조작을 위한 series.map() 함수

by 독학박사 2023. 5. 30.

목차


    series.map()은 pandas의 Series 객체에서 사용되는 함수입니다. 이 함수는 각 요소에 대해 지정된 함수를 적용하여 새로운 값을 반환합니다. 데이터 프레임  기존의 값을 범주에 맞게 변경을 하거나, 기존 열의값들을 이용하여 신규 열의 값을 계산할  사용할  있는 map() 함수에 대해 정리해 보겠습니다. 

     

     

    df.apply() 함수와 유사한 series.map()
    df.apply() 함수와 유사한 series.map()

     

     1. series.map() 언제 사용하는가?

    series.map()은 pandas의 Series 객체에서 사용되는 함수입니다. 이 함수는 각 요소에 대해 지정된 함수를 적용하여 새로운 값을 반환합니다.

     

    map() 함수는 주로 DataFrame의 특정 열(시리즈)의 각 요소를 변환이 필요할 때 사용합니다. 또한, 기존 열의 값을 기반으로 새로운 열을 만들어야 할 때 사용합니다

     

    map() 함수는 단일 인수를 받는 함수 또는 딕셔너리를 인자로 받을 수 있습니다. 함수의 경우, 각 요소는 함수에 전달되고 반환된 값으로 대체됩니다. 딕셔너리의 경우, 각 요소는 딕셔너리의 키로 매핑되고 해당 값으로 대체됩니다.

     

     

     2. series.map() 함수의 기본 사용법

    series.map() 함수의 시그니처는 다음과 같은 형태입니다. series.map()이라 표현한 이유는 map() 메서드는 pandas Series 객체에서 사용되는 메서드이기 때문입니다. DataFrame 객체에 대해서는 map() 메서드 대신 apply() 메서드를 사용해야 합니다.

     

    DataFrame.map(arg, na_action=None)

     

     인자들의 설명은 아래와 같이 정리하였습니다.

     

    arg: 변환에 사용되는 함수 또는 딕셔너리입니다. 함수의 경우, 각 요소는 함수에 전달되고 반환된 값으로 대체됩니다. 딕셔너리의 경우, 각 요소는 딕셔너리의 키로 매핑되고 해당 값으로 대체됩니다.

    na_action (선택적): 결측값(NA) 처리 방법을 지정하는 매개변수입니다. 기본값은 None으로, 결측값이 있는 경우 그대로 유지됩니다. 다른 옵션으로는 'ignore'와 'raise'가 있습니다. 'ignore'를 선택하면 결측값은 변환되지 않고 그대로 유지되며, 'raise'를 선택하면 결측값이 있는 경우 예외가 발생합니다.

     

    arg는 함수 또는 딕셔너리로 지정할 수 있습니다. 함수는 각 요소에 대해 적용될 수 있는 변환 로직을 포함해야 하며, 딕셔너리는 각 요소를 대체할 값과 대체될 요소를 매핑하는 데 사용됩니다.

     

    결측값 처리 방법은 na_action 매개변수를 통해 지정할 수 있으며, 기본적으로 결측값이 있는 경우 그대로 유지됩니다. 'ignore'를 선택하면 결측값은 변환되지 않고 그대로 유지되며, 'raise'를 선택하면 결측값이 있는 경우 예외가 발생합니다.

     

     3.  변환을 위한 series.map() 함수 사용

    값 변환은 기존 열의 각 요소를 다른 값으로 변환하고자 할 때 사용됩니다. 다음은 series.map()을 사용하여 DataFrame의 열을 변환하는 예제입니다. 사용에 있어 한 가지 주의할 점은 map의 함수는 series에 한하여 사용이 가능합니다. 아래 코드에서도 df['Gender']는 dataframe이 아니라 series 객체를 뜻합니다.

     

    import pandas as pd
    
    data = {'Name': ['John', 'Emma', 'Peter'],
            'Age': [25, 30, 35],
            'Gender': ['Male', 'Female', 'Male']}
    
    df = pd.DataFrame(data)
    
    # 성별을 숫자로 매핑
    gender_mapping = {'Male': 0, 'Female': 1}
    df['Gender'] = df['Gender'].map(gender_mapping)
    
    print(df)
    
    
    # 결과값
    #     Name  Age  Gender
    # 0   John   25       0
    # 1   Emma   30       1
    # 2  Peter   35       0

     

    위의 예제에서, 성별 열을 숫자로 매핑하기 위해 map() 함수를 사용했습니다. gender_mapping 딕셔너리를 만들어 각 성별을 해당하는 숫자로 매핑하였습니다. 결과적으로 'Male'은 0으로, 'Female'은 1로 변환되었습니다.

     

     4. 새로운  생성을 위한 series.map() 함수 사용

      새로운 열을 생성하기 위해서는 기존 열의 값을 기반으로 새로운 값을 계산하고 해당 값을 새로운 열에 추가해야 합니다. 다음은 dataframe.map()을 사용하여 DataFrame에 새로운 열을 생성하는 예제입니다.

     

    import pandas as pd
    
    data = {'Name': ['John', 'Emma', 'Peter'],
            'Age': [25, 30, 35],
            'Score': [80, 90, 75]}
    
    df = pd.DataFrame(data)
    
    # 성적에 따라 학점 열 추가
    def calculate_grade(score):
        if score >= 90:
            return 'A'
        elif score >= 80:
            return 'B'
        elif score >= 70:
            return 'C'
        else:
            return 'F'
    
    df['Grade'] = df['Score'].map(calculate_grade)
    
    print(df)
    
    
    # 결과값
    #     Name  Age  Score Grade
    # 0   John   25     80     B
    # 1   Emma   30     90     A
    # 2  Peter   35     75     C

     

    위의 예제에서, 성적에 따라 학점을 계산하여 Grade 열을 추가하기 위해 map() 함수를 사용했습니다. calculate_grade()라는 함수를 정의하여 점수에 따라 학점을 반환하도록 했습니다. map() 함수를 사용하여 각 행의 Score 열 값을 calculate_grade() 함수에 매핑하고, 반환된 학점을 Grade 열에 추가하였습니다.

     

     

    5. 마치며

     지금까지 pandas에서 제공하고 있는 map() 함수에 대해 알아보았습니다. map() 함수는 apply() 함수와 비슷하게 사용하지만 그 객체가 다릅니다. apply()는 dataframe 객체에서 사용하지만, map()은 series 객체에서 사용하는 메서드입니다. 다음에는 두 함수에 대해 비교한 내용을 정리해 보도록 하겠습니다.