데이터 분석 작업을 하다 보면 하나의 날짜 문자열을 일(day), 월(month), 연도(year)로 나누어야 하는 경우가 자주 발생합니다. 예를 들어 다음과 같은 데이터프레임이 있고, 날짜 열을 세 개의 개별 열로 분할한 결과를 얻고 싶다고 가정해 보겠습니다.
date day month year 0 17/05/2002 17 05 2002 1 16/02/1990 16 02 1990 2 25/09/1980 25 09 1980 3 11/05/2000 11 05 2000 4 17/09/1986 17 09 1986
해결 방법
이 문제는 판다스(pandas)의 str.split() 메서드를 활용하면 간단하게 해결할 수 있습니다. 전체 과정은 다음 두 단계로 구성됩니다.
날짜 문자열로 이루어진 리스트를 생성하여 데이터프레임에 할당합니다.
df['date'] 열에
str.split()함수를 적용하고, 구분자(delimiter)로 '/'를 지정합니다. 이때expand=True옵션을 사용하면 분할된 결과가 별도의 열로 확장되며, 이를 df[["day", "month", "year"]]에 할당합니다.
예제 코드
아래 코드를 통해 실제 동작 과정을 확인해 보겠습니다.
import pandas as pd
df = pd.DataFrame({
'date': ['17/05/2002','16/02/1990','25/09/1980','11/05/2000','17/09/1986']
})
print("Original DataFrame:")
print(df)
df[["day", "month", "year"]] = df["date"].str.split("/", expand = True)
print("\nNew DataFrame:")
print(df)실행 결과
Original DataFrame: date 0 17/05/2002 1 16/02/1990 2 25/09/1980 3 11/05/2000 4 17/09/1986 New DataFrame: date day month year 0 17/05/2002 17 05 2002 1 16/02/1990 16 02 1990 2 25/09/1980 25 09 1980 3 11/05/2000 11 05 2000 4 17/09/1986 17 09 1986
핵심 포인트 정리
str.split("/", expand=True)의 동작 원리를 간단히 살펴보면 다음과 같습니다.
str 접근자(accessor): 판다스 시리즈의 문자열 요소에 벡터화된 문자열 연산을 적용할 수 있게 해줍니다.
expand=True: 기본값(False)에서는 분할된 결과가 리스트 형태의 단일 시리즈로 반환되지만, True로 설정하면 각 분할 요소가 개별 열을 가진 DataFrame으로 반환됩니다.
참고로 날짜 데이터를 단순히 문자열로 분할하는 대신, pd.to_datetime(df['date'], format='%d/%m/%Y')으로 변환한 뒤 .dt.day, .dt.month, .dt.year 속성을 사용하는 방법도 있습니다. 이 방식은 날짜 유효성 검증까지 함께 수행해 주기 때문에 더 견고한 처리가 필요할 때 유용합니다.