데이터프레임을 다룰 때 자주 마주치는 세 가지 함수:
바로 apply, map, applymap.
이름도 비슷하고, 전부 뭔가 "함수를 적용"하는 느낌이라 처음 접하면 많이 헷갈리죠.
하지만 적용 대상과 범위가 다르며, 상황에 따라 최적의 선택이 따로 있습니다.
이번 포스팅에서는 이 세 함수의 차이를 명확하게 정리하고, 예제로 완벽하게 이해해봅시다!
한눈에 정리: map, apply, applymap
예제 데이터프레임 준비
import pandas as pd
df = pd.DataFrame({
'이름': ['철수', '영희', '민수'],
'국어': [80, 90, 85],
'영어': [78, 95, 88]
})
print(df)
map() – Series의 원소 하나하나에 함수 적용
map()은 Series에만 사용 가능하며, 각 요소에 하나씩 함수나 값을 적용합니다.
df['이름'] = df['이름'].map(lambda x: '학생-' + x)
주의
- DataFrame에는 직접 쓸 수 없습니다. (df.map() ❌)
apply() – Series나 DataFrame에 "함수 통째로" 적용
- Series에 apply → 각 원소에 함수 적용
- DataFrame에 apply → 행 또는 열 단위로 적용
▶ 예: 국어 점수에 +5점 보너스 (Series에 적용)
df['국어'] = df['국어'].apply(lambda x: x + 5)
▶ 예: 각 행(row)별 평균 점수 계산
df['평균'] = df[['국어', '영어']].apply(lambda row: row.mean(), axis=1)
핵심 포인트
- axis=0: 열(column) 기준 (기본값)
- axis=1: 행(row) 기준
applymap() – DataFrame의 모든 원소에 함수 적용
- DataFrame 전 요소를 하나씩 순회하며 함수 적용
- 숫자, 문자열, 어떤 타입이든 전부 변환하고 싶을 때 유용
▶ 예: 점수를 문자열로 변환
df[['국어', '영어']] = df[['국어', '영어']].applymap(lambda x: str(x) + '점')
주의
- applymap은 DataFrame 전용입니다! Series에는 적용할 수 없습니다.
어떤 걸 언제 써야 할까?
실무 팁
- 반복문보다 빠르고 직관적인 apply, map을 적극 활용하세요!
- 성능이 중요한 대규모 데이터에서는 vectorized 연산(넘파이 방식)이 더 빠를 수 있어요.
- applymap()은 사용 빈도가 낮지만, 전처리 단계에서 유용할 수 있습니다.
마무리
Pandas의 apply, map, applymap은 데이터 전처리와 변환에서 가장 자주 쓰이는 도구입니다.
각 함수의 특징을 잘 이해하고 상황에 맞게 사용하면, 코드가 훨씬 더 깔끔하고 효율적해집니다.
'파이썬 > 데이터프레임 다루기' 카테고리의 다른 글
Pandas size vs value_counts() — 무엇이 다를까? (0) | 2025.03.27 |
---|---|
Pandas vs NumPy – 연산 성능 비교, 누가 더 빠를까? (0) | 2025.03.25 |
Pandas iloc vs iat – 정수 인덱스로 DataFrame 다루기 (0) | 2025.03.25 |
Pandas at vs loc – 헷갈리지 말고 정확히 쓰자! (0) | 2025.03.25 |
이터레이터 vs 제너레이터: 파이썬 반복의 핵심 이해하기 (0) | 2025.03.24 |