본문 바로가기
데이터분석과 AI/파이썬을 엑셀처럼 쓰기

9. 채우기 (apply문)

by 우공80 2022. 12. 14.
728x90

채우기 apply문

앞서 채우기 방법으로 for 문을 사용했습니다. for문은 직관적으로 이해가 쉽지만, 느린 것이 단점입니다.

데이터가 작으면 괜찮지만, 데이터가 커지고 로직이 복잡해질수록 for문 수행 속도가 느려집니다.

일반적으로 python에서는 이런 경우에 for문을 사용하지 않습니다.

이럴 때 쓰라고 최적화해서 만들어 놓은 apply문을 사용합니다.

apply 함수 사용법

 

apply(함수, axis= 0 or 1)

apply는 apply 안에 매개변수로 받은 함수에 DataFrame의 한 개 행 전체, 혹은 한 개 열의 값을 전달하여 계산하고 그 결과를 반환합니다.

함수에 DataFrame의 한 개 행을 전달하는 경우

말로 하면 어려우니, 예시를 보겠습니다. 우선 apply의 매개변수인 함수에 DataFrame의 한 개 행을 전달하는 경우입니다.

boston_price.apply(lambda x:x['MEDV']*2,axis=1)

Output:

0      48.0
1      43.2
2      69.4
3      66.8
4      72.4
       ... 
501    44.8
502    41.2
503    47.8
504    44.0
505    23.8
Length: 506, dtype: float64

lambda x라는 것이 보이는 데, 이것은 함수를 간결하게 표현하는 방식이라고 보시면 됩니다. lambda 식을 이용한 익명 함수 처리와 def로 함수 정의하는 방법에 대해서는 후에 다루겠습니다. 여기서는 그냥 "lambda x:"를 쓴다고 외우시면 됩니다. 

여기서는 boston_price의 한 개 행이  x가 됩니다. 한 개의 행 x에서 'MEDV' 열에 2를 곱해서  반환합니다. 이때, 계산은 'MEDV'라는 '열'에 대해 이루어지므로 axis=1을 입력해줍니다. 

함수에 DataFrame의 한 개 열의 값을 전달하는 경우

다음은 DataFrame의 한 개 열의 값을 전달하는 경우입니다.

boston_price['MEDV'].apply(lambda x:x*2)

Output:

0      48.0
1      43.2
2      69.4
3      66.8
4      72.4
       ... 
501    44.8
502    41.2
503    47.8
504    44.0
505    23.8
Name: MEDV, Length: 506, dtype: float64

boston_price의 'MEDV'열에 대해 apply함수를 적용했습니다. 함수에 전달하는 값은 'MEDV'열의 값 자체이므로 열 방향으로 계산 없이 값을 그대로 계산하여 반환하게 됩니다. (axis=0 이 default)

Excel의 채우기와 비교해보면, 한 개의 값을 만들고 나머지를 채우는 것이 아니라 한 번에 다 채우는 거긴 합니다만, 그게 그거죠.

자 이렇게 apply 함수에 대해 알아보았습니다.

728x90

댓글