[비정제 데이터] 접근자 .str과 .dt

jul ee·2025년 4월 14일

데이터 성장기

목록 보기
45/139

🖇  .str vs .dt
🖇  예시 상황으로 비교하기


데이터 분석을 하다 보면 문자열과 날짜/시간 데이터를 다루는 일이 정말 자주 생긴다.

    이름에서 성을 따오거나,
    날짜에서 연도만 뽑거나,
    특정 요일에 일어난 이벤트를 분석하거나,

이때 Pandas에서는 두 가지 접근자를 사용한다.

str → 문자열(string) 처리

dt → 날짜/시간(datetime) 처리

이 글에서는 두 접근자의 개념과 차이점, 사용 시 주의사항을 예제를 통해 살펴보고

언제 .str을 쓰고 언제 .dt를 써야 하는지 정리해 보았다.



🖇  .str  vs  .dt

Pandas에서는 문자열(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')

✓   시간 기반 마케팅

  • 생일이 12월인 고객만 추출  → .dt.month == 12
  • 주말 구매 여부 확인  → .dt.weekday >= 5
  • 특정 연도 기준 분석  → .dt.year == 2024



지금까지 문자열과 날짜, 시간 데이터를 다룰 때 사용되는 두 접근자를 비교하며 알아보았다.

구분.str.dt
언제 사용문자열 다룰 때날짜/시간 데이터 다룰 때
전처리 필요 여부바로 사용 가능pd.to_datetime() 필요
자주 쓰는 기능분리, 치환, 포함 여부 등연도/월/요일 추출, 주말 여부 등

정리하자면
문자열은 .str, 날짜는 .dt 접근자라는 것이다.

둘의 역할만 잘 기억하고 있으면 대부분의 데이터 가공은 어렵지 않게 해결할 수 있다.

앞으로 문자열 또는 날짜 데이터가 나오면
"str 써야 하나?", "dt 써야 하나?" 고민하지 말고 바로 접근해 보자.

데이터 타입만 제대로 확인해두면 오류 없이 빠르게 처리할 수 있을 것이다.

df.dtypes로 데이터 타입을 항상 체크하는 습관을 들이자 :)

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

0개의 댓글