개발로그필름
[데이터 TIL] 다른 타입의 년, 월, 일 컬럼 한개의 컬럼으로 합치기 본문
📢 데이터를 다룰 때, 연도(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를 하나로 합쳤으니,
기존 컬럼을 삭제해서 데이터 깔끔하게 정리
'데이터분석가 > 데이터 TIL' 카테고리의 다른 글
[데이터 TIL] Apache Airflow란? (0) | 2025.02.24 |
---|---|
[데이터 TIL] EDA(Exploratory Data Analysis, 탐색적 데이터 분석)란? (0) | 2025.02.13 |
내가 보려고 만든 데이터분석 파이썬 초기 세팅 코드 (0) | 2025.02.12 |
[데이터 TIL] 분산이란? (0) | 2025.02.11 |
[데이터 TIL] plt.xscale('log') & plt.yscale('log')란? (0) | 2025.02.11 |