[플레이데이터 빅데이터 부트캠프]Python 익명 함수 vs 어플라이 함수

데이터프레임을 조작하다 보면 정의해놓은 함수에 따라서 전체 프레임이나 특정한 column의 값들을 일괄적으로 변경할 때 익명 함수어플라이 함수를 많이 사용한다.

어플라이 함수

어플라이 함수를 사용하여 데이터프레임을 간편하게 조작하여 보자.

먼저 특정 함수를 만들어, 어플라이 함수를 사용하여 데이터프레임의 특정 칼럼에 적용할 수 있다.

예시1)

# 만약 `tips`데이터의 `day`컬럼에서의 값(value)인 [Thur(목), Fri(금), Sat(토), Sun(일)] 을 인코딩 없이 머신러닝 모델에 학습데이터로 feed한다면 에러가 발생할 것
# apply를 활용하여 라벨인코딩 해 보세요.
def encoding(data):
    if data == 'Thur': return 0
    if data == 'Fri': return 1
    if data == 'Sat': return 2
    if data == 'Sun': return 3
    
    convert1 = tips['day'].apply(encoding)
    tips['change_day'] = convert1
tips.head()

change_day라는 칼럼에 encoding 함수를 적용하여 새로운 featur가 생성된 것을 확인할 수 있다.

예시2)

이러한 데이터프레임에서 미나리반은 강서구, 개나리은 강동구, 장미은 광명시로 새로운 열을 만들어보자.

def func(x):
    if x['반'] == '미나리' :
        return '강서'
    elif x['반'] == '개나리' :
        return '강동'
    else :
        return '광명'

df['분점'] = df.apply(func, axis=1)

이렇게 어플라이 함수를 사용하여, 정의해 놓은 함수를 특정 칼럼에 쉽게 적용할 수 있다는 것을 확인하였다.

익명 함수

익명 함수 또는 람다 함수는 임시 함수로서 간단한 연산을 할 때 사용된다.

(lambda x, y : x**y)(1, 2)
1

f = lambda x, y : x**y
f(1,2) 
1

익명 함수는 map()함수와 같이 많이 사용된다.

 ex = [1, 2, 3, 4, 5] 
 list(map(lambda value : value **2, ex))
 [1, 4, 9, 16, 25]

※맵 함수를 사용하여 센스있게 리스트의 자료형으로 변환할 수도 있다.

li = [ 169.7, 140, 166, 122]
list(map(float, li))
[169.7, 140.0, 166.0, 122.0]

 

이제 익명 함수를 판다스 데이터프레임에 적용하여 보자.

지정한 행에 전체 시행하고 싶을 때 아래와 같이 익명 함수를 사용할 수 있다.

아래와 같이 익명 함수에 조건을 걸어 데이터프레임에 적용할 수 있다.