apply는 「Series나 DataFrame의 모든 요소·행·열에 임의의 함수를 적용하는」 매우 유연한 메서드입니다.
표준 함수로 표현하기 어려운 변환에 마지막 수단으로 쓰입니다.
Series에 적용.
df["name"].apply(len) — 각 이름의 길이.
df["name"].apply(lambda s: s.upper()) — 대문자로.
한 열의 각 값에 함수를 적용해 새 Series를 만듭니다.
DataFrame에 적용.
df.apply(lambda row: row["a"] + row["b"], axis=1) — 각 행에 함수 적용.
axis=0(기본)이면 각 열에.
「여러 열을 결합한 새 열 만들기」에 자주 씁니다.
applymap (Pandas 2.x에서는 .map).
모든 셀에 함수 적용.
df.applymap(lambda x: f"{x:.2f}") — 모든 셀을 소수점 둘째 자리 문자열로.
주의 — 성능.
apply는 매우 유연하지만 Pandas의 다른 벡터화 함수보다 훨씬 느립니다(파이썬 함수 호출이 매번 일어남).
가능하면 「벡터화된 표현」을 먼저 시도하고, 마지막에 apply를 쓰는 게 좋습니다.
df["price"] * 1.1은 (df["price"]).apply(lambda x: x * 1.1)보다 100배 빠릅니다.
한 줄 요약
apply는 Series·DataFrame의 모든 요소·행·열에 임의 함수를 적용하는 유연한 도구입니다.
매우 강력하지만 벡터화 표현보다 느리므로 마지막 수단으로 사용합니다.
더 알아볼 것
- apply vs map vs applymap
- axis=0 vs axis=1 직관
- Numba·Cython — apply 가속