달나라 노트

Python Pandas : pandas.to_datetime 본문

Python/Python Pandas

Python Pandas : pandas.to_datetime

CosmosProject 2020. 11. 23. 16:27
728x90
반응형

 

 

pandas.to_datetime

to_datetime은 어떤 날짜를 나타내는 문자열을 정해진 format을 기반으로 Date 형식으로 바꿔주는 역할을 합니다.




Pandas 공식 문서를 보면 굉장히 많은 인자가 to_datetime에 적용될 수 있지만 여기서는 한번 간단하게 실사용 위주로 알아봅시다.

import pandas as pd

x = pd.to_datetime('20200123')

print(x)
print(type(x))


x = pd.to_datetime('2020-01-23')

print(x)
print(type(x))
 
- Output
2020-01-23 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
2020-01-23 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
  

결과를 보면 20200123이라는 문자가 2020-01-23 00:00:00이라는 Timestamp로 바뀐 후 반환된 것을 알 수 있습니다.

 

그리고 2020-01-23이라는 문자를 전달했을 때에도 동일하게 2020-01-23 00:00:00이라는 Timestamp로 바뀐 후 반환된 것을 알 수 있습니다.

 

일단 저는 날짜정보를 담고 있는 문자열만 전달했고 format은 따로 전달해주지 않았는데 알아서 인식하여 Timestamp로 바꿔줍니다.

 

이렇게 기본적으로 일반적인 형식들은 알아서 format을 인식해줍니다.




위와 동일하지만 format을 수동으로 지정해주려면 아래 예시처럼 해야합니다.

import pandas as pd

x = pd.to_datetime('20200123', format='%Y%m%d')

print(x)
print(type(x))


x = pd.to_datetime('2020-01-23', format='%Y-%m-%d')

print(x)
print(type(x))
 
- Output
2020-01-23 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
2020-01-23 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
  

여기서 지정해주는 format의 의미는,

'반환될 Timestamp를 내가 지정한 format의 형태로 반환해줘!'가 아니라

'전달해 준 문자열이 내가 준 format으로 적혀있으니 이걸 참고해서 해당 문자열을 Timestamp로 바꿔줘' 라는 것에 주의합니다.

 

그래서 두 번째 forat은 년, 월, 일 사이에 하이픈을 넣어줬죠.

왜냐면 전달준 문자열에서 년, 월, 일이 하이픈으로 구분되어있으니까요.




만약 반환값이 Timestamp라 00:00:00 처럼 시간까지 찍히는게 싫다면 아래처럼 date()를 사용하면 됩니다.

import pandas as pd

x = pd.to_datetime('20200123', format='%Y%m%d')
x = x.date()

print(x)
print(type(x))


x = pd.to_datetime('2020-01-23', format='%Y-%m-%d')
x = x.date()

print(x)
print(type(x))
 
- Output
2020-01-23
<class 'datetime.date'>
2020-01-23
<class 'datetime.date'>
  




to_datetime의 사용법 중 하나는 아래처럼 문자열로된 날짜 데이터를 datetime 데이터로 바꿀 때 유용합니다.

import pandas as pd

dict_1 = {
    'id': [1, 2, 3, 4, 5],
    'col_date': ['20200801', '20200901', '20201001', '20201101', '20201201']
}
df_1 = pd.DataFrame(dict_1)

print(df_1)
print(df_1.info())


df_1['col_date'] = df_1.apply(lambda x: pd.to_datetime(x['col_date'], format='%Y%m%d'), axis=1)

print(x)
print(df_1.info())
 
- Output
   id  col_date
0   1  20200801
1   2  20200901
2   3  20201001
3   4  20201101
4   5  20201201
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 2 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   id        5 non-null      int64 
 1   col_date  5 non-null      object
dtypes: int64(1), object(1)
memory usage: 208.0+ bytes
None


   id   col_date
0   1 2020-08-01
1   2 2020-09-01
2   3 2020-10-01
3   4 2020-11-01
4   5 2020-12-01
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 2 columns):
 #   Column    Non-Null Count  Dtype         
---  ------    --------------  -----         
 0   id        5 non-null      int64         
 1   col_date  5 non-null      datetime64[ns]
dtypes: datetime64[ns](1), int64(1)
memory usage: 208.0 bytes
None
  

output의 info정보를 보면 col_date컬럼의 Dtype이 datetime으로 바뀌었음을 알 수 있습니다.



 

 

 

 

 

728x90
반응형
Comments