데이터 분석을 하다 보면 데이터프레임의 각 요소(element)에 특정 함수를 일괄 적용해야 하는 경우가 자주 발생합니다. 그런데 모든 함수가 벡터화(vectorized)될 수 있는 것은 아닙니다. 이럴 때 유용하게 사용할 수 있는 것이 바로 판다스의 applymap 함수입니다.
applymap은 데이터프레임의 개별 요소 하나를 입력으로 받아, 변환된 단일 값을 출력으로 반환하는 방식으로 동작합니다. 즉, 데이터프레임의 모든 셀에 대해 지정한 함수가 순차적으로 적용됩니다.
applymap의 주요 특징
- 데이터프레임의 모든 요소에 함수를 적용합니다.
- 단일 값을 입력받아 단일 값을 반환하는 함수와 함께 사용해야 합니다.
- 시리즈(Series)에는 사용할 수 없으며, 오직 데이터프레임 전용 메서드입니다.
예제 코드
import pandas as pd
import numpy as np
my_df = pd.DataFrame(np.random.randn(5,5), columns=['col_1','col_2','col_3','col_4','col_5'])
print("생성된 데이터프레임:")
print(my_df)
my_df.applymap(lambda x: x * 11.45)
print("applymap 함수 적용 후 각 열의 평균값:")
print(my_df.apply(np.mean))실행 결과
생성된 데이터프레임:
col_1 col_2 col_3 col_4 col_5
0 -0.671510 -0.860741 0.886484 0.842158 2.182341
1 -1.355763 0.247240 -0.653630 -0.278095 0.163044
2 -0.816203 1.664006 1.555648 1.625890 -0.412338
3 -1.013273 -1.565076 1.297014 -0.303504 -1.623573
4 0.725949 -0.077588 -0.886957 0.433478 -0.300151
applymap 함수 적용 후 각 열의 평균값:
col_1 -0.626160
col_2 -0.118432
col_3 0.439712
col_4 0.463985
col_5 0.001865
dtype: float64코드 설명
pandas와numpy라이브러리를 임포트하고, 코드 가독성을 위해 별칭(alias)을 지정합니다.numpy의
random.randn함수를 사용하여 정규분포를 따르는 난수로 구성된 5행 × 5열 크기의 데이터프레임을 생성합니다.데이터프레임을 정의할 때
columns매개변수에 리스트 형태로 열 이름(col_1 ~ col_5)을 함께 지정합니다.생성된 데이터프레임을 콘솔에 출력하여 확인합니다.
applymap함수를 호출하여 데이터프레임의 각 요소에 람다(lambda) 함수를 적용합니다.여기서 람다 함수는
x * 11.45로 정의되어, 모든 요소에 11.45를 곱하는 연산을 수행합니다.마지막으로
apply(np.mean)을 통해 각 열별 평균값을 계산하고 결과를 콘솔에 출력합니다.
참고: applymap vs apply vs map
applymap: 데이터프레임의 개별 요소에 함수를 적용할 때 사용합니다.
apply: 행 또는 열(축) 단위로 함수를 적용할 때 사용합니다. 위 예제에서
my_df.apply(np.mean)는 각 열의 평균을 계산합니다.map: 시리즈(Series) 객체의 개별 요소에 함수를 적용할 때 사용합니다.
이처럼 상황에 맞는 함수를 선택하면 판다스 데이터 처리 작업을 훨씬 효율적으로 수행할 수 있습니다.