파이썬 판다스 데이터프레임 apply함수 사용 - 특정 조건(if)의 값 바꾸기!

목차

    2019. 5. 2. 06:30

    데이터 프레임을 가공하다 보면, 특정 조건에 맞는 값을 변경해야 될 경우가 있습니다. 이를 처리할 수 있는 방법은 여러 가지입니다. 하지만 그중에서도 코드를 깔끔하게 작성하고, 직관적으로 이해하기 쉽게 코드를 작성하는 방법이 있습니다. 

    오늘은 파이썬 판다스 데이터 프레임의 apply 함수를 이용하는 방법에 대해서 알아보겠습니다.

     

     

    기존에 필자는 특정 조건에 맞는 값을 바꾸기 위해, ix구문을 사용해 왔습니다. 하지만 이 구문은 deprecated, 즉 사라질 예정이기 때문에 더 이상은 사용하기가 어렵습니다.

    예를 들어 특정칼럼의 문자열 값이 없을 때 999로 바꾸는 코드를 아래와 같이 작성했는데, warning이 뜹니다.

     

    > df.ix[df["순위"]=="","순위"]=999

    > /Applications/PyCharm CE.app/Contents/helpers/pydev/pydevconsole.py:1: DeprecationWarning: .ix is deprecated. Please use.loc for label based indexing or .iloc for positional indexing
    See the documentation here:http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
    '''

     

    ix문은 사라질 것이기 때문에 iloc을 사용하라고 합니다. 하지만, iloc구문을 이용해서 특정 조건의 값을 바꾸기는 쉽지 않습니다. 이러한 경우에는 apply함수를 사용하는 것이 더 쉽고 직관적으로 보입니다. 위의 경우에는 apply함수를 이용해서 아래와 같이 사용할 수 있습니다.

     

    1
    df["순위"= df["순위"].apply(lambda x: 999 if x=="" else x)
    cs

     

    apply함수는 조건이 여러 가지일 때 더 효과적으로 사용할 수 있습니다. 예를 들어 조건이 2개라면 아래와 같이 앞의 순서대로 if와 else를 연속해서 작성할 수가 있습니다. "999를 넣어라 값이 없으면 , 아니면 300을 넣어라 x가 1이면, 그것도 아니면 그냥 x를 넣어라." 이런 식으로 계속 이어서 쓸 수 있습니다. 이는 lambda함수를 이용하는 것입니다.

     

    1
    df["순위"= df["순위"].apply(lambda x: 999 if x == "" else 300 if x==1 else x)
    cs
     

     

    lambda함수의 사용이 어색하다면, 그냥 함수를 만들어서 아래와 같이 사용할 수도 있습니다.

     
    1
    2
    3
    4
    5
    6
        def test(x):
            if x==""return 999
            elif x==1return 300
            elsereturn x
            
        df["순위"= df["순위"].apply(test)
    cs
     
     

    오늘은 이렇게 파이썬 판다스 데이터 프레임 apply함수의 사용법에 대해서 알아보았습니다. 특정 조건의 값을 바꾸기 위해서 사용하던 ix문은 이제 사라질 예정입니다. apply함수를 이용하면 ix문을 대체할 수 있고, 특히 조건이 여러 개인 경우에 유용하게 사용할 수 있었습니다.

     

    파이썬을 직접 활용하는 것만큼 효과적인 공부는 없다. 그래서 파이썬을 활용해서 할 수 있는 일들을 정리해보았다. 

     

    오픈 API를 사용하면 다양한 재미있는 일들을 해 볼 수 있다. 파이썬을 활용한 오픈API 사용이 궁금하다면 링크를 참조하시기 바랍니다.