개발로그필름

[데이터 TIL] 다른 타입의 년, 월, 일 컬럼 한개의 컬럼으로 합치기 본문

데이터분석가/데이터 TIL

[데이터 TIL] 다른 타입의 년, 월, 일 컬럼 한개의 컬럼으로 합치기

yuullog 2025. 2. 12. 15:33
728x90
반응형
SMALL

📢 데이터를 다룰 때, 연도(year), 월(month), 일(day) 정보가 따로 나뉘어 있는 경우가 많다

이 데이터를 하나의 날짜 컬럼(datetime)으로 변환하는 방법을 포스팅 해보려고 한다

 


 

🏷 1. 문제 상황

데이터를 다루다 보면, 연(year), 월(month), 일(day)이 각각 다른 컬럼으로 저장되어 있는 경우가 있다

예를 들어, 호텔 예약 데이터에서 다음과 같은 컬럼을 볼 수 있다

arrival_date_year arrival_date_month arrival_date_day
2016 July 1
2017 August 2
2018 September 3

 

📌 이제 목표는 이 세 개의 컬럼을 하나의 날짜 컬럼(arrival_date)으로 합쳐서 변환하는 것

변환 후 원하는 결과는 다음과 같다

arrival_date
2016-07-01
2017-08-02
2018-09-03

 

반응형

 


 

🏷 2. 문제점: 다른 타입의 데이터

💡 각 컬럼의 데이터 타입을 확인해보면, 서로 다를 가능성이 높다

print(hotel_df.dtypes)

📌 예를 들어, 다음과 같은 타입일 수 있다

  • arrival_date_year → 정수(int) (2016, 2017 등)
  • arrival_date_month → 문자열(object) ("July", "August" 등)
  • arrival_date_day → 정수(int) (1, 2 등)
  •  

📌 그런데 datetime으로 변환하려면, 월(month)이 반드시 숫자로 되어 있어야 한다

따라서 "July" 같은 문자열을 숫자로 변환하는 과정이 필요하다

 


 

🏷 3. 해결 방법: datetime으로 변환하기

연, 월, 일을 하나의 arrival_date 컬럼으로 합치는 방법

 

1️⃣ 월(month) 문자열을 숫자로 변환

현재 arrival_date_month 컬럼이 "July", "August" 같은 문자열이라면,

이를 숫자로 변환 ("January" → 1, "December" → 12)

import pandas as pd

# 'January' → 1, 'February' → 2 ... 'December' → 12 로 변환
hotel_df["arrival_date_month"] = pd.to_datetime(hotel_df["arrival_date_month"], format="%B").dt.month

 

2️⃣ 연(year), 월(month), 일(day)을 하나로 합쳐 datetime 변환하기

hotel_df["arrival_date"] = pd.to_datetime(
    hotel_df["arrival_date_year"].astype(str) + "-" +
    hotel_df["arrival_date_month"].astype(str) + "-" +
    hotel_df["arrival_date_day"].astype(str),
    format="%Y-%m-%d"
)

 

📌 변환 후 결과 (출력 확인)

   arrival_date
0   2016-07-01
1   2017-08-02
2   2018-09-03

arrival_date 컬럼이 datetime64[ns] 타입으로 변환

 

3️⃣ 기존의 연, 월, 일 컬럼 삭제하기

arrival_date_year, arrival_date_month, arrival_date_day를 하나로 합쳤으니,

기존 컬럼을 삭제해서 데이터 깔끔하게 정리

 

 

반응형
LIST
Comments