개요
데이터 분석을 하다 보면 데이터프레임의 문자열 값을 모두 대문자로 변환해야 하는 경우가 자주 발생합니다. 판다스(Pandas)에서는 str.upper() 메서드나 apply() 함수를 활용해 이 작업을 손쉽게 처리할 수 있습니다. 이 글에서는 두 가지 방법을 예제 코드와 함께 살펴보겠습니다.
방법 1: str.upper() 사용
.str.upper()는 시리즈(Series)의 모든 문자열 요소를 대문자로 변환하는 벡터화된 메서드입니다. 문법이 간결하고 가독성이 뛰어나 단순 대소문자 변환에 가장 널리 쓰이는 방식입니다. 아래 예제에서 'Day' 열의 값들을 대문자로 변경해 보겠습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'Day': ['mon', 'tue', 'wed', 'thu', 'fri'],
'Subject': ['Math', 'english', 'science', 'music', 'games']})
# 'Day' 열의 모든 값을 대문자로 변환
df['Day'] = df['Day'].str.upper()
print(df)위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Day Subject 0 MON Math 1 TUE english 2 WED science 3 THU music 4 FRI games
'mon', 'tue' 등 소문자였던 요일 값이 MON, TUE처럼 모두 대문자로 바뀐 것을 확인할 수 있습니다.
방법 2: apply()와 람다(lambda) 함수 사용
apply() 함수에 람다 식을 전달하여 각 요소에 개별적으로 upper()를 적용할 수도 있습니다. 이 방식은 단순 변환을 넘어 조건 분기나 복잡한 문자열 처리 로직이 필요할 때 특히 유용합니다.
# 데이터프레임 생성
df = pd.DataFrame({'Day': ['mon', 'tue', 'wed', 'thu', 'fri'],
'Subject': ['Math', 'english', 'science', 'music', 'games']})
# 'Subject' 열의 각 값에 upper() 적용
df1 = df['Subject'].apply(lambda x: x.upper())
print(df1)위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
0 MATH 1 ENGLISH 2 SCIENCE 3 MUSIC 4 GAMES Name: Subject, dtype: object
두 방법의 차이점과 선택 기준
두 방법 모두 동일한 결과를 얻을 수 있지만, 상황에 따라 적합한 도구가 다릅니다.
- str.upper(): 단순 대소문자 변환에 최적화되어 있으며, 내부적으로 벡터화 연산을 수행하므로 대용량 데이터에서도 성능이 우수합니다.
- apply() + lambda: 각 요소에 임의의 함수를 적용할 수 있어, 여러 조건을 결합하거나 복잡한 전처리 로직이 필요한 경우에 적합합니다.
따라서 단순히 대문자로 변환하는 작업이라면 str.upper()를, 그 이상의 커스텀 로직이 필요하다면 apply()를 사용하는 것이 좋습니다.