[비정제 데이터] 헷갈리기 쉬운 함수: replace, map, apply

jul ee·2025년 4월 14일

데이터 성장기

목록 보기
44/139

🖇  메서드 기능과 적용 대상
🖇  언제 어떤 걸 써야 할까?


Pandas를 쓰다 보면 값을 바꾸거나 새로운 열을 만들기 위해 사용하는 함수들이 있는데

그중에서도 유난히 헷갈리는 세 가지가 있다.

     replace, map, apply

기능도 비슷해 보이고 문법도 닮았지만 이 셋은 적용 대상과 사용 목적이 아주 뚜렷하게 다르다.

이 글에서는 이 세 가지 함수의 차이점, 정확한 개념, 사용법, 적용 예시를 정리해 보았다.



🖇  메서드 기능과 적용 대상

아래의 표로 세 함수의 기능과 적용 대상을 살펴보자.

메서드적용 대상기능 요약
replaceSeries & DataFrame특정 값을 다른 값으로 바꾼다
mapSeries만각 원소에 딕셔너리나 함수를 적용
applySeries & DataFrame행 또는 열 단위로 함수를 유연하게 적용

이렇게만 봤을 때는 와닿지 않을 수 있다.

아래에서 간단한 예제를 통해 세 함수를 비교해 보자.

우선 간단한 예제 데이터프레임을 만들었다.

import pandas as pd

df = pd.DataFrame({
    'fruit': ['apple', 'banana', 'apple', 'orange'],
    'price': [1000, 2000, 1200, 1500]
})

replace:  특정 값을 다른 값으로 일대일 매핑

df['fruit'] = df['fruit'].replace({'apple': 'peach'})
print(df)

'apple'  →  'peach'로 변경된다.

복잡한 연산 없이 값 자체를 대체할 때 유용하다.



map:  Series의 각 값에 함수 or 딕셔너리 매핑

(1) 딕셔너리로 매핑

color_map = {'peach': 'pink', 'banana': 'yellow', 'orange': 'orange'}
df['color'] = df['fruit'].map(color_map)

(2) 함수 적용

df['fruit_length'] = df['fruit'].map(len)

map()Series 전용이고, 값마다 직접 변환이 필요할 때 가장 간결하다.

e.g.,  문자열 길이 구하기, 특정 범주 색상 지정 등.



apply: 열 or 행 전체에 함수 적용

# Series에 적용 (map과 비슷)
df['fruit_upper'] = df['fruit'].apply(lambda x: x.upper())

# DataFrame 전체에 적용 (행/열 단위)
df['total'] = df[['price', 'fruit_length']].apply(sum, axis=1)

apply()는 DataFrame에도 사용 가능하며,

범용성이 좋아 조건에 따라 복잡한 연산, 조건문, 여러 열 간 연산이 필요한 경우 사용된다.




🖇  언제 어떤 걸 써야 할까?

상황추천 메서드이유
"특정 값만 바꾸고 싶다"replace()딕셔너리 기반으로 딱 떨어지게 바꿀 때
"딕셔너리/단순 함수로 Series 변환하고 싶다"map()Series 전용. 값 단위로 깔끔한 변환 가능
"여러 열을 동시에 조작하고 싶다"apply()행/열 단위 연산, 복잡한 로직 처리 가능

아래의 예시를 통해 어떨 때 사용되는지 비교해 보자.

사례 1: 성별 데이터 인코딩

df['gender'] = df['gender'].replace({'남자': 1, '여자': 0})  # replace

나이에 따른 연령대 부여

df['age_group'] = df['age'].map(lambda x: '청소년' if x < 20 else '성인')  # map

여러 컬럼을 조합한 고객 점수 계산

def calc_score(row):
    return row['purchase'] * 0.4 + row['visit'] * 0.6

df['score'] = df.apply(calc_score, axis=1)  # apply



지금까지 Pandas에서 헷갈리기 쉬운 세 함수를 비교 정리해 보았다.

  • replace()  → 값 그대로 바꾸고 싶을 때
  • map()  → Series를 값 단위로 간단하게 변환할 때
  • apply()  → 범용적인 함수 적용, 복잡한 로직 필요할 때

처음엔 비슷해 보여도,

이 세 가지를 구분할 수 있게 되면 Pandas 코드의 가독성과 효율성이 훨씬 높아진다.

특히 apply()는 너무 남용하면 느려질 수 있으니,
map() 또는 replace()로 해결 가능한 경우엔 그걸 먼저 고려하는 습관을 가지는 것도 권장된다 :)

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글