728x90
map()은 Pandas에서 **단일 열(Series)**의 값을 변환할 때 가장 직관적이고 빠르게 사용할 수 있는 함수다.
아래와 같은 상황에서 특히 유용하다:
- 숫자를 등급으로 변환하고 싶을 때
- 특정 키워드를 다른 텍스트로 바꾸고 싶을 때
- 조건 기반 라벨링을 한 줄로 하고 싶을 때
- 단일 열에만 함수 적용이 필요한 경우
예제 데이터
import pandas as pd
df = pd.DataFrame({
'score': [95, 82, 67, 74, 59],
'gender': ['M', 'F', 'F', 'M', 'M']
})

기본 문법
Series.map(func_or_dict)
- func_or_dict: 함수, 딕셔너리, Series 가능
- 반환값은 Series
1. 예제: 숫자 점수를 등급으로 변환 (함수 기반)
def to_grade(x):
if x >= 90: return 'A'
elif x >= 80: return 'B'
elif x >= 70: return 'C'
else: return 'D'
df['grade'] = df['score'].map(to_grade)

→ map()으로 각 행의 값을 지정된 함수에 넣어 변환
2. 예제: 간단한 lambda로 변환
df['passed'] = df['score'].map(lambda x: 'Y' if x >= 70 else 'N')

→ apply()보다 가볍고 가독성 좋음 (단일 열일 경우)
3. 예제: 딕셔너리 기반 값 치환
gender_map = {'M': '남성', 'F': '여성'}
df['gender_kr'] = df['gender'].map(gender_map)

→ 'M' → '남성', 'F' → '여성'으로 값 매핑
map(dict)은 .replace()와 유사하지만 Series 전용이며 반환도 Series
4. 예제: 결측치 포함된 경우
df['gender'].map({'M': '남성'})

→ 매핑되지 않은 값은 NaN 처리됨
필요한 경우 .fillna()와 함께 사용
5. 예제: 열 값 계산
df['bonus'] = df['score'].map(lambda x: x * 0.1)
→ 수치 계산을 열 단위로 수행할 때도 유용
map()과 apply() 차이점
| 항목 | map() | apply() |
| 대상 | Series | Series or DataFrame |
| 입력 가능 | 함수 / 딕셔너리 / Series | 함수만 가능 (복잡한 연산 포함) |
| 목적 | 값 치환, 변환 | 범용 함수 적용 |
| 속도 | 빠름 | 비교적 느림 |
예제: 등급 & 보너스 동시 처리
df['grade'] = df['score'].map(lambda x: 'A' if x >= 90 else 'B' if x >= 80 else 'C')
df['bonus'] = df['score'].map(lambda x: round(x * 0.05, 2))

map()은 Pandas의 Series 전용 변환 도구로,
조건 기반 라벨링, 값 변환, 매핑 치환 등 단일 열 데이터 가공 시 가장 많이 쓰이는 함수다.
특히 apply()와 혼동되는 경우가 많지만,
단일 열 + 단순 연산이면 무조건 map이 더 빠르고 간결하다.
728x90
반응형
'python > Pandas | Numpy' 카테고리의 다른 글
| [Pandas] where() - 조건을 만족하는 값은 살리고, 아니면 치환 (0) | 2025.04.29 |
|---|---|
| [Pandas] applymap() - DataFrame 전체 셀에 함수를 적용 (0) | 2025.04.29 |
| [Pandas] explode() (리스트가 들어있는 셀 행마다 분해) (1) | 2025.04.24 |
| [Pandas] eval() (열 간 수식을 짧고 빠르게 처리) (0) | 2025.04.24 |
| [Pandas] query() (loc보다 더 깔끔하게 조건 필터링) (0) | 2025.04.24 |
