달나라 노트

Python Pandas : to_datetime (Dataframe에서 날짜 텍스트를 날짜 type으로 전환하기, convert date text to date type) 본문

Python/Python Pandas

Python Pandas : to_datetime (Dataframe에서 날짜 텍스트를 날짜 type으로 전환하기, convert date text to date type)

CosmosProject 2025. 9. 28. 03:00
728x90
반응형

 

 

 

data를 다루다보면 날짜는 특히 다양한 형태를 가질 수 있습니다.

YYYYMMDD, YYYY-MM-DD 등의 다양한 형식으로 날짜를 표시할 수 있죠.

 

다양하게 적힌 날짜를 표시하는 int, string 등의 데이터를 실제 date type으로 변환해야 할 때가 있는데 이때 유용하게 사용할 수 있는 기능이 to_datetime method입니다.

 


Syntax

pandas.to_datetime(value, format='date_format')

 

- value

datetime type으로 변경할 대상이 될 값을 의미합니다.

 

- format=''

주어진 value가 어떠한 형태로 적혀있는지를 의미합니다.

format은 다양한 기호로 적혀지는데 datetime format 기호 관련해서는 아래 글을 참조하면 좋습니다.

https://cosmosproject.tistory.com/106

 

Python datetime : strftime(시간 날짜 데이터를 텍스트로) & strptime(텍스트를 시간 날짜 데이터로)

2020-03-08이라는 날짜를 표현하는 방식은 다양합니다. 2020-03-08이라고 표현할 수도 있으며 2020/03/08, 03/08/2020, 03-08-2020, 08-03-2020 등등 여러 구분기호(-, / etc)와 년, 월, 일의 순서를 변경할 수도 있습

cosmosproject.tistory.com

 

 

 

 

import pandas as pd


df = pd.DataFrame({
    'date1': [20250101, 20251005, 20250307, 20250920],
    'date2': ['2025-01-25', '2025-12-25', '2025-07-01', None],
})
print(df)
print(df[['date1', 'date2']].dtypes)


-- Result
      date1       date2
0  20250101  2025-01-25
1  20251005  2025-12-25
2  20250307  2025-07-01
3  20250920        None

date1     int64
date2    object
dtype: object

 

위 예시를 보면 date1, date2 column은 모두 날짜 관련 데이터를 담고있지만

date1은 int이며, date2는 text입니다.

즉, date type이 아니라는 것이죠.

단순히 날짜를 표시할 뿐 진짜 날짜 객체가 아니라는 것입니다.

 

그래서 데이터를 다루다보면 이러한 날짜 텍스트를 진짜 date type으로 만들어야할 때가 있는데

보통의 경우라면 datetime library를 사용하겠지만 dataframe 안에서 이러한 텍스트 <-> 날짜 data type변환을 할 수 있는 유용한 함수가 있습니다.

 

 

 

 

 

import pandas as pd


df = pd.DataFrame({
    'date1': [20250101, 20251005, 20250307, 20250920],
    'date2': ['2025-01-25', '2025-12-25', '2025-07-01', None],
})

df['date1_converted'] = pd.to_datetime(df['date1'], format='%Y%m%d')  # 1
print(df)
print(df[['date1', 'date2', 'date1_converted']].dtypes)


-- Result
      date1       date2 date1_converted
0  20250101  2025-01-25      2025-01-01
1  20251005  2025-12-25      2025-10-05
2  20250307  2025-07-01      2025-03-07
3  20250920        None      2025-09-20

date1                       int64
date2                      object
date1_converted    datetime64[ns]
dtype: object

 

위 코드는 yyyymmdd 형태의 int type으로 담겨져있는 date1 column을 실제로 date type으로 바꾸는 형식입니다.

 

# 1

df['date1_converted'] = pd.to_datetime(df['date1'], format='%Y%m%d')

이 부분의 코드를 보면 위처럼 사용되고 있습니다.

to_datetime method의 대상이 될 값은 df['date1']입니다. df의 date1 column에 있는 값을 변환하라는 의미죠.

 

그리고 핵심은 format에 전달하는 값인데 format에 전달하는 값은 to_datetime method의 변환 대상이 되는 값이 어떠한 형태로 날짜를 표시하고 있는가입니다.

date1은 yyyymmdd의 형태로 적혀있으므로 %Y%m%d 라는 format을 적어줘야 합니다.

 

 

 

 

import pandas as pd


df = pd.DataFrame({
    'date1': [20250101, 20251005, 20250307, 20250920],
    'date2': ['2025-01-25', '2025-12-25', '2025-07-01', None],
})

df['date1_converted'] = pd.to_datetime(df['date1'], format='%Y%m%d')  # 1

df['date2_converted'] = pd.to_datetime(df['date2'], format='%Y-%m-%d')  # 2
print(df)
print(df[['date1', 'date2', 'date1_converted', 'date2_converted']].dtypes)


-- Result
      date1       date2 date1_converted date2_converted
0  20250101  2025-01-25      2025-01-01      2025-01-25
1  20251005  2025-12-25      2025-10-05      2025-12-25
2  20250307  2025-07-01      2025-03-07      2025-07-01
3  20250920        None      2025-09-20             NaT

date1                       int64
date2                      object
date1_converted    datetime64[ns]
date2_converted    datetime64[ns]
dtype: object

 

이번엔 date2 column에 담긴 값을 실제 date type으로 변환해봅시다.

 

# 2 부분을 봅시다.

df['date2_converted'] = pd.to_datetime(df['date2'], format='%Y-%m-%d')  # 2

아까와 마찬가지로 적혀있습니다.

다만 한 가지 차이는 date2 column은 date1과 달리 yyyy-mm-dd의 형태로 날짜를 나타내고 있습니다.

따라서 format에도 이 형태에 맞게 %Y-%m-%d라고 적어주어야 합니다.

 

 

 

 

 

 

 

 

FYI.

pandas의 to_datetime method는 단순히 dataframe이나 series에만 적용할 수 있는 것은 아닙니다.

아래처럼 단일 값의 date type 변환도 가능합니다.

import pandas as pd

print(pd.to_datetime(20251225, format='%Y%m%d'))


-- Result
2025-12-25 00:00:00

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments