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

2019. 5. 2. 06:30

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

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


판다스_if문



기존에 필자는 특정 조건에 맞는 값을 바꾸기 위해, 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함수를 이용하는 것이다. lambda함수에 대한 자세한 내용이 궁금하다면, 아래 포스팅을 참조해보자.
( 참조: 파이썬 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 사용이 궁금하다면 아래 글을 참조해보자.
(참조: 오픈API를 활용한 사례는 어떤 것들이 있을까?)


댓글()