pandas

[ pandas ] to_datetime 시간데이터 다루기 기본

우언 2022. 2. 14. 15:38

1. 생성

pd.to_datetime

from datetime import datetime 


date_list = ['1997-07-22',datetime(1998,11,9),'22nd of jul, 1999']
date_series = pd.Series(date_list)


print(date_list)
print(date_series)

print(pd.to_datetime(date_list))
print(pd.to_datetime(date_series))

 

['1997-07-22', datetime.datetime(1998, 11, 9, 0, 0), '22nd of jul, 1999']
0             1997-07-22
1    1998-11-09 00:00:00
2      22nd of jul, 1999
dtype: object
DatetimeIndex(['1997-07-22', '1998-11-09', '1999-07-22'], dtype='datetime64[ns]', freq=None)
0   1997-07-22
1   1998-11-09
2   1999-07-22
dtype: datetime64[ns]

여러가지의 시간 형식을 자동으로 datetime형식으로 바꾸어준다 리스트의 경우 인덱스 객ㄹ체로 시리즈의 경우 각 원소가 데이트 타임인 시리즈로 리턴해준다

 

기본적인 포맷은 자동으로 처리해주지만

pd.to_datetime('2022:07:22:00:00')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\arrays\datetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object, allow_mixed)
   2186         try:
-> 2187             values, tz_parsed = conversion.datetime_to_datetime64(data.ravel("K"))
   2188             # If tzaware, these values represent unix timestamps, so we

이렇게 기본적인 포맷이 아닌경우에는 오류가 일어난다 이럴경우에는 포맷을 직접 지정해주면된다.

 

pd.to_datetime('22:7:22:00:00:00', format='%y:%m:%d:%H:%M:%S')
Timestamp('2022-07-22 00:00:00')

format = '문자열'로 지정해주면 성공적으로 된다.

같은 위치에 원하는 형식을 넣어주면된다.

 

형식 포맷
네자리 연도 (2020) %Y
두자리 연도 (20) %y
%m
날짜 %d
%H
%M
%S

 

 

pd.date_range

 

print(pd.date_range('2022-01-01', periods =7, freq='2H'))
print(pd.date_range('2022-01-01', periods =7, freq='2H'))
print(pd.date_range('2022-01-01', periods =7, freq='D'))
print(pd.date_range('2022-01-01', periods =7, freq='M'))
print(pd.date_range('2022-01-01', periods =7, freq='Y'))
DatetimeIndex(['2022-01-01 00:00:00', '2022-01-01 02:00:00',
               '2022-01-01 04:00:00', '2022-01-01 06:00:00',
               '2022-01-01 08:00:00', '2022-01-01 10:00:00',
               '2022-01-01 12:00:00'],
              dtype='datetime64[ns]', freq='2H')
DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
               '2022-01-05', '2022-01-06', '2022-01-07'],
              dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2022-01-31', '2022-02-28', '2022-03-31', '2022-04-30',
               '2022-05-31', '2022-06-30', '2022-07-31'],
              dtype='datetime64[ns]', freq='M')
DatetimeIndex(['2022-12-31', '2023-12-31', '2024-12-31', '2025-12-31',
               '2026-12-31', '2027-12-31', '2028-12-31'],
              dtype='datetime64[ns]', freq='A-DEC')

원하는 stride를 기준으러 생성가능하다

pd.date_range(시작날짜, 끝날짜, freq = 'stride', periods = (정수, 이거 사용시 끝날짜 x))

 

2. 연산

from datetime import timedelta

dt_Series = pd.to_datetime(date_series)
print(dt_Series)
print('-'*30)
print('지금시간 : ', datetime.today())
print('-'*30)
print(dt_Series - datetime.today())
print('-'*30)
print(dt_Series - datetime(1998,11,9))
print('-'*30)
print(dt_Series - datetime(1998,11,9) > timedelta(days=1))
print('-'*30)
print(dt_Series + timedelta(days=1))
0   1997-07-22
1   1998-11-09
2   1999-07-22
dtype: datetime64[ns]
------------------------------
지금시간 :  2022-02-14 15:35:32.845328
------------------------------
0   -8974 days +08:24:27.154672
1   -8499 days +08:24:27.154672
2   -8244 days +08:24:27.154672
dtype: timedelta64[ns]
------------------------------
0   -475 days
1      0 days
2    255 days
dtype: timedelta64[ns]
------------------------------
0    False
1    False
2     True
dtype: bool
------------------------------
0   1997-07-23
1   1998-11-10
2   1999-07-23
dtype: datetime64[ns]

시간끼리의 연산이 가능하다.

 

시간의 스칼라를 timedelta로 더할수도 

한 시점과 한 시점을 비교, 연산할 수도 있다.