🖇
.strvs.dt
🖇 예시 상황으로 비교하기
데이터 분석을 하다 보면 문자열과 날짜/시간 데이터를 다루는 일이 정말 자주 생긴다.
이름에서 성을 따오거나,
날짜에서 연도만 뽑거나,
특정 요일에 일어난 이벤트를 분석하거나,
이때 Pandas에서는 두 가지 접근자를 사용한다.
str→ 문자열(string) 처리
dt→ 날짜/시간(datetime) 처리
이 글에서는 두 접근자의 개념과 차이점, 사용 시 주의사항을 예제를 통해 살펴보고
언제 .str을 쓰고 언제 .dt를 써야 하는지 정리해 보았다.
.str vs .dtPandas에서는 문자열(string)과 날짜(datetime) 데이터를 다룰 때,
직접 함수로 처리하지 않고도 각 타입에 특화된 전용 접근자를 제공한다.
이 접근자들은 마치 문자열이나 날짜 객체처럼 메서드를 쓸 수 있도록 만들어 준다.
두 접근자가 어떤 차이를 갖고 있고, 어떤 기능을 제공하는지 표로 비교해 보았다.
| 항목 | .str | .dt |
|---|---|---|
| 대상 | 문자열 (object 또는 string 타입) | 날짜/시간 (datetime 타입) |
| 대표 기능 | 대소문자 변환, 자르기, 포함 여부 | 연도, 월, 일, 요일 등 시간 추출 |
| 적용 조건 | 문자열이면 바로 사용 가능 | pd.to_datetime()으로 먼저 변환 필요 |
| 예시 메서드 | .str.lower(), .str.contains() | .dt.year, .dt.month, .dt.weekday() |
위 표를 보면 알 수 있듯
.str은 문자열 가공에 강하고, .dt는 날짜 요소 추출에 특화되어 있다.
중요한 점은 .dt는 반드시 datetime 타입이어야 작동한다는 점이다.
이를 모르고 그냥 object 타입 문자열에 .dt를 쓰면 에러가 발생하니, 먼저 pd.to_datetime()을 활용해 전처리를 해주는 습관을 들이면 좋다.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice Kim', 'Bob Lee', 'Charlie Park'],
'birthdate': ['1990-01-01', '1985-05-12', '2000-07-23']
})
.str 메서드로 문자열 처리# 성(마지막 단어) 추출
df['last_name'] = df['name'].str.split().str[-1]
# 이름에 'Lee'가 포함되어 있는지 확인
df['has_lee'] = df['name'].str.contains('Lee')
str.split()으로 공백 기준 나눈 뒤, str[-1]로 성을 추출하고
str.contains()는 특정 단어 포함 여부를 Boolean 값으로 반환한다.
.dt 메서드로 날짜/시간 처리datetime에 대해 더 알고 싶다면
파이썬 공식 문서 datetime — Basic date and time types를 참고하기 바란다.
# birthdate를 datetime 형식으로 변환
df['birthdate'] = pd.to_datetime(df['birthdate'])
# 연, 월, 요일 등 추출
df['birth_year'] = df['birthdate'].dt.year
df['birth_month'] = df['birthdate'].dt.month
df['weekday'] = df['birthdate'].dt.weekday # 0=월, 6=일
.dt는 datetime64 타입 열에만 적용 가능하므로, pd.to_datetime()이 필수로 사용된다.
.dt.weekday는 숫자로 요일을 반환한다. (0=월요일)
.dt는 반드시 datetime 형식이어야만 작동한다.
.str은 object 타입 문자열에서 바로 사용 가능하지만,.dt는 전처리가 필수이다.
# 문자열인데 dt 메서드 사용하려는 경우 → 오류 발생
df['birthdate'].dt.year
# 해결 방법
df['birthdate'] = pd.to_datetime(df['birthdate'])
이제 실제 분석에서 자주 마주치는 두 가지 상황을 통해
.str과 .dt가 각각 어떻게 활용되는지 살펴보자.
✓ 고객 이름 분석
.str.len().str.split('@').str[1]'Manager' in name) → .str.contains('Manager')✓ 시간 기반 마케팅
.dt.month == 12.dt.weekday >= 5.dt.year == 2024지금까지 문자열과 날짜, 시간 데이터를 다룰 때 사용되는 두 접근자를 비교하며 알아보았다.
| 구분 | .str | .dt |
|---|---|---|
| 언제 사용 | 문자열 다룰 때 | 날짜/시간 데이터 다룰 때 |
| 전처리 필요 여부 | 바로 사용 가능 | pd.to_datetime() 필요 |
| 자주 쓰는 기능 | 분리, 치환, 포함 여부 등 | 연도/월/요일 추출, 주말 여부 등 |
정리하자면
문자열은 .str, 날짜는 .dt 접근자라는 것이다.
둘의 역할만 잘 기억하고 있으면 대부분의 데이터 가공은 어렵지 않게 해결할 수 있다.
앞으로 문자열 또는 날짜 데이터가 나오면
"str 써야 하나?", "dt 써야 하나?" 고민하지 말고 바로 접근해 보자.
데이터 타입만 제대로 확인해두면 오류 없이 빠르게 처리할 수 있을 것이다.
df.dtypes로 데이터 타입을 항상 체크하는 습관을 들이자 :)