본문 바로가기
Python/Basic Data Analysis

[Python] 람다 관련 (apply, applymap)

by JKyun 2022. 4. 26.

안녕하세요~ 우주신 입니다.

 

저번 포스팅에 이어 lambda와 함께 자주 쓰이는 apply를 빠르게 살펴볼게요.

이전 포스팅: 람다 관련 (lambda, map)

 

applymap과는 달리 series(row/column) 전체에 해당 함수를 적용 합니다.

예시부터 보면서 쉽게 이해해보죠.

 

먼저, 데이터는 sklearn에서 제공하는 datasets을 불러왔습니다.

import pandas as pd
import numpy as np

from sklearn import datasets
data = datsets.load_diabetes()

저희는 예시에 쓸 아무 데이터프레임 하나만 필요하니 아래와 같이 df로 정의하겠습니다.

df = pd.DataFrame(data['data'], index=data['target'], columns=data['feature_names'])

1. DataFrame.apply(표현식, axis=?)

df.apply(sum, axis=0)

데이터프레임의 각각의 column에 sum이라는 기능을 적용해 봤습니다.
여기서 column은 axis=0, row는 axis=1로 적용해주면 됩니다.

 

물론 다른 방법으로도 같은 결과를 낼 수 있는데,

apply 함수를 쓰다보면 복잡한 기능도 구현할 수 있고 속도 또한 상대적으로 빠른 편이라 자주 활용 됩니다.

 

이번에는 아래 기능을 구현해보죠.

"데이터프레임의 각 열에 대해 최대값과 최소값의 차이를 구하라"

df.apply(lambda x: x.max()-x.min())

 

이제 lambda와 함께 apply를 활용한 예시를 살펴보죠.

 

데이터프레임의 특정 column/row에 어떠한 조건을 적용하는 예시 입니다.
"데이터프레임의 'age' 열의 값이 음수인 경우 모두 Nan으로 처리해라"

df['age'] = df['age'].apply(lambda x: np.nan if x < 0 else x)

위 출력 결과를 보면 age 열의 음수 값이 모두 NaN 처리 된 것을 확인 할 수 있습니다.

위 모든 column에 대하여 음수 값을 모두 NaN 처리하고 싶다면 어떻게 하면 될까요?

 

2. DataFrame.applymap(표현식)

applymap을 활용하면 아주 간편하게 데이터프레임 전체에 원하는 기능을 적용할 수 있습니다.

df.applymap(lambda x: np.nan if x < 0 else x)

위 출력 결과를 보면 모든 열에 대해 적용된 것을 확인할 수 있습니다.

 

 

끝~

댓글