| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- PySpark
- math
- numpy
- Java
- hive
- Presto
- PANDAS
- Tkinter
- dataframe
- GIT
- PostgreSQL
- c#
- Kotlin
- 파이썬
- Python
- Excel
- gas
- Google Spreadsheet
- Github
- Google Excel
- matplotlib
- string
- django
- array
- Redshift
- SQL
- list
- Apache
- google apps script
- Today
- Total
달나라 노트
Python Pandas : to_datetime (Dataframe에서 날짜 텍스트를 날짜 type으로 전환하기, convert date text to date type) 본문
Python Pandas : to_datetime (Dataframe에서 날짜 텍스트를 날짜 type으로 전환하기, convert date text to date type)
CosmosProject 2025. 9. 28. 03:00
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
'Python > Python Pandas' 카테고리의 다른 글
| Python Pandas : dtypes (column의 data type 출력, column data type 확인) (0) | 2025.09.28 |
|---|---|
| Python Pandas : dt.strftime() (dataframe에서 date type을 string으로 변환, convert datetime to string in dataframe) (0) | 2025.09.28 |
| Python Pandas : groupby와 rank를 이용해 row number 추가하기 (0) | 2025.04.05 |
| Python Pandas : cummin, cummax (누적최소값, 누적최대값) (0) | 2024.08.01 |
| Python Pandas : cumsum, cumprod (누적합, 누적곱) (0) | 2024.08.01 |
