본문 바로가기
판다스/중급 판다스

[pandas] replace 함수와 map 함수의 차이점

by 김판다t 2024. 10. 24.

제목: 판다스에서의 replace 함수와 map 함수의 차이점

데이터 분석에서 특정 값의 변환 작업은 필수적입니다. 판다스에서 셀의 값을 대체하는 데 사용되는 주요 함수로는 replace와 map이 있습니다. 둘을 모두 매퍼를 활용해 값을 대체하는 함수이지만, 일반적으로 replace는 특정 값을 치환하는 함수로 map은 값을 매핑하는 함수로 알려져 있습니다.

 

그렇다면 치환과 매핑은 어떻게 다른 것일까요? 이 둘은 엄밀하게 구분되지는 않지만, 흔히 일부 값을 변환하는 것을 치환이라 부르고, 전체 값을 변환하는 것을 매핑이라고 합니다. 따라서 전체 값을 치환할 때는 매핑과 큰 차이가 없다고 할 수 있습니다.

 

공통점

 

이해를 돕기 위해 간단한 예시를 살펴보겠습니다.

import pandas as pd 
# 예시 시리즈 생성 
s = pd.Series(['사과', '바나나', '바나나', '포도', '사과'])

 

위의 시리즈 s에서 사과, 바나나, 포도의 값을 각각 '0', '1', '2'로 변환해 보겠습니다. 이 경우 replace와 map을 사용했을 때 모두 동일한 결과가 도출됩니다.

# 매퍼 생성
m1 = {'사과': '0', '바나나': '1', '포도': '2'}

# replace 함수로 변환 
s.replace(m1) 

# map 함수로 변환 
s.map(m1)

 

전체를 변환했기에 두 함수의 결과는 동일하게 나타납니다.

 

차이점

 

그러나 일부 값만 치환할 때는 replace와 map 함수 간에 큰 차이가 발생합니다. 두 함수는 변환하지 않는 값을 다르게 처리합니다. replace 함수는 변환하지 않는 기존의 값을 그대로 남기지만, map 함수는 매핑되지 않은 값을 NaN으로 처리합니다.

 

다음 코드를 통해, 사과만 0으로 변환할 때 두 함수의 차이를 확인해 보겠습니다.

# 매퍼 생성
m2 = {'사과': '0'}

# replace 함수로 사과만 '0'으로 변환 
s.replace(m2) 

# map 함수로 사과만 '0'으로 변환 
s.map(m2)

replace 함수는 사과만 '0'으로 변환하고 나머지 바나나와 포도를 그대로 유지합니다. 반면 map 함수는 사과를 제외한 나머지 값들을 NaN으로 처리합니다.

 

map 함수의 장점

 

map 함수가 매핑되지 않은 값을 NaN으로 반환하기 때문에, 변환하지 않는 값을 일괄적으로 처리할 때 유용합니다. 예를 들어 사과만 0으로 매핑한 뒤 나머지 모든 값을 fillna 함수를 사용해 1로 대체할 수 있습니다.

# 사과는 '0'으로, 나머지는 모두 '1'로 변환 
s.map(m2).fillna('1')

만약 사과만 '0'으로 변환하고, 나머지 30개의 다른 과일을 모두 '1'로 변환해야 한다면, map 함수가 매우 유용할 것입니다.

 
replace 함수와 map 함수의 차이 정리

 

그 밖에도 map과 replace는 적용 대상과 몇몇 기능에서 차이를 보입니다. 이를 정리하면 다음과 같습니다.

비교 항목 replace map
데이터 프레임에 적용이 가능한가? O X
시리즈에 적용이 가능한가? O O
인덱스 클래스에 적용이 가능한가? X O
임무가 수행되지 않는 값의 처리 기존의 값을 반환 NaN을 반환
일부 문자열을 치환 가능한가? O (regex=True) X

 

정확하게 알고 필요한 곳에 적용한다면, 두 함수는 모두 유용합니다.

 

판다스 2.2.2+ 이상에서 유의할 점

 

판다스 2.2.2+ 버전에서는 replace 함수로 전체를 치환하는 작업이 더 이상 권장되지 않습니다. 본문에 사용된 예시의 경우 오브젝트 자료형을 오브젝트로 변환하였기에 문제는 없지만,  예를 들어 replace 함수를 사용하여 오브젝트 자료형인 데이터의 전체를 치환해 열의 자료형을 실수(float)와 같은 다른 자료형으로 변환하는 작업은 추천되지 않습니다.(경고 및 에러 발생)

 

전체 데이터를 변환할 때는 map 함수를 사용하는 것이 더 적절합니다. 일부만 치환하는 것은 열의 자료형이 변경되지 않으니 replace 함수가 여전히 유용합니다.


교보문고 구매 페이지, 알라딘 구매 페이지yes24 구매 페이지

 

 

 


유튜브에서 판다스 강의 중입니다.

https://www.youtube.com/@KimPandas