본문 바로가기
Python

[파이썬] 판다스: 날짜데이터, np.datetime64 , to_datetime, to_timedelta, DatetimeIndex, date_range, timedelta_range

by eyoo 2022. 5. 4.

파이썬에서 날짜데이터를 다루려면 기본적으로 datetime과 dateutil 라이브러리를 활용해야한다.

 

from datetime import datetime
from dateutil.parser import parse

 

만약 날짜로 이루어진 문자열들이 리스트안에 들어있는데 그것을 날짜 형식으로 바꿔주려면

 

in:

date_str_list = ['2022-05-11' , '2022-06-10','2022-07-03']
for data in date_str_list:
    print(parse(data))

out:

2022-05-11 00:00:00
2022-06-10 00:00:00
2022-07-03 00:00:00

 

이와같은 날짜관련 함수들의 활용법을 아래 3개의 링크를 통해 참고해보자:

 

strftime section

datetime documentation

dateutil's online documentation

 

 

기존의 파이썬 datetime 을 보강하기 위해, 날짜의 array 도 처리할 수 있게 넘파이에서 64-bit 로 처리하도록 라이브러리를 강화했다.

 

'2022-05-11'이라는 문자열을 넘파이로 날짜데이터 작업이 용이하도록 만들어보자

 

in:

any_date = np.array('2022-05-11', dtype = np.datetime64)
any_date

out:

numpy.datetime64('2022-05-11')

# 이제 날짜데이터를 작업할 수 있다.

 

 

해당 날짜로 부터 열흘 이후의 날짜를 가져올수 있으며,

 

in:

any_date +10

out:

numpy.datetime64('2022-05-21')

 

 

넘파이의 arange 함수를 활용하여 날짜로 이루어진 배열을 만들수있다.

 

in:

any_date + np.arange(10)

out:

array(['2022-05-11', '2022-05-12', '2022-05-13', '2022-05-14',
       '2022-05-15', '2022-05-16', '2022-05-17', '2022-05-18',
       '2022-05-19', '2022-05-20'], dtype='datetime64[D]')

 

 

넘파이에서 날짜 데이터를 활용할수 있듯이 판다스에서도 날짜 데이터를 다루는 기능을 제공한다.

 

판다스의 to_datetime 함수를 사용하여 문자열로 이루어진 리스트를 날짜데이터로 활용할수있는 상태로 만들어보자

 

in:

dates = ['2022-01-04','2022-01-07','2022-01-08','2022-01-22']
dates1 = pd.to_datetime(dates)
dates1

out:

DatetimeIndex(['2022-01-04', '2022-01-07', '2022-01-08', '2022-01-22'], dtype='datetime64[ns]', freq=None)

 

 

또한 to_timedelta와 arange함수를 활용하여 날짜의 간격으로 이루어진 배열을 만들수 있다.

 

in:

pd.to_timedelta(np.arange(10),'D')

out:

TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days', '5 days',
                '6 days', '7 days', '8 days', '9 days'],
               dtype='timedelta64[ns]', freq=None)

# arange함수 뒤에 'D' 가 들어있는 파라미터 자리에 년,월,주,일,시,분 등 다양한 날짜 및 시간단위를 설정할수 있다.

 

주 단위:

 

in:

any_date + pd.to_timedelta(np.arange(10),'W')

out:

DatetimeIndex(['2022-05-11', '2022-05-18', '2022-05-25', '2022-06-01',
               '2022-06-08', '2022-06-15', '2022-06-22', '2022-06-29',
               '2022-07-06', '2022-07-13'],
              dtype='datetime64[ns]', freq=None)

 

 

시간 단위:

 

in:

any_date + pd.to_timedelta(np.arange(10),'h')

out:

DatetimeIndex(['2022-05-11 00:00:00', '2022-05-11 01:00:00',
               '2022-05-11 02:00:00', '2022-05-11 03:00:00',
               '2022-05-11 04:00:00', '2022-05-11 05:00:00',
               '2022-05-11 06:00:00', '2022-05-11 07:00:00',
               '2022-05-11 08:00:00', '2022-05-11 09:00:00'],
              dtype='datetime64[ns]', freq=None)

 

 

이전에 22년 5월 11일을 설정한 변수와 위의 날짜의 간격을 더해주면 해당 날짜부터 설정한 간격을 두고 나타낼수 있다.

 

in:

any_date + pd.to_timedelta(np.arange(10),'D')

out:

DatetimeIndex(['2022-05-11', '2022-05-12', '2022-05-13', '2022-05-14',
               '2022-05-15', '2022-05-16', '2022-05-17', '2022-05-18',
               '2022-05-19', '2022-05-20'],
              dtype='datetime64[ns]', freq=None)

 

 

DatetimeIndex 함수를 사용하여 날짜데이터를 시리즈 및 데이터프레임의 인덱스로 활용할수있다.

 

in:

dates = ['2022-01-04', '2022-01-07', '2022-01-08', '2022-01-22']
date_index = pd.DatetimeIndex(dates)
df = pd.Series(data=[20000,35000,18000,22000], index=date_index)
df

out:

2022-01-04    20000
2022-01-07    35000
2022-01-08    18000
2022-01-22    22000
dtype: int64

 

 

date_range 함수는 시작일과 종료일을 세팅하면 알아서 날짜를 채우도록하는 함수다.

 

22년 5월 4일 부터 22년 6월 21일까지의 날짜배열을 만들어보자.

 

in:

pd.date_range('2022-05-04','2022-06-21')

out:

DatetimeIndex(['2022-05-04', '2022-05-05', '2022-05-06', '2022-05-07',
               '2022-05-08', '2022-05-09', '2022-05-10', '2022-05-11',
               '2022-05-12', '2022-05-13', '2022-05-14', '2022-05-15',
               '2022-05-16', '2022-05-17', '2022-05-18', '2022-05-19',
               '2022-05-20', '2022-05-21', '2022-05-22', '2022-05-23',
               '2022-05-24', '2022-05-25', '2022-05-26', '2022-05-27',
               '2022-05-28', '2022-05-29', '2022-05-30', '2022-05-31',
               '2022-06-01', '2022-06-02', '2022-06-03', '2022-06-04',
               '2022-06-05', '2022-06-06', '2022-06-07', '2022-06-08',
               '2022-06-09', '2022-06-10', '2022-06-11', '2022-06-12',
               '2022-06-13', '2022-06-14', '2022-06-15', '2022-06-16',
               '2022-06-17', '2022-06-18', '2022-06-19', '2022-06-20',
               '2022-06-21'],
              dtype='datetime64[ns]', freq='D')

 

 

date_range에 freq파라미터를 사용하여 간격의 단위를 설정할수있다.

 

in:

pd.date_range('2022-05-04','2022-06-21', freq='W')

out:

DatetimeIndex(['2022-05-08', '2022-05-15', '2022-05-22', '2022-05-29',
               '2022-06-05', '2022-06-12', '2022-06-19'],
              dtype='datetime64[ns]', freq='W-SUN')

# 주 간격으로 설정하여 나타내었다.

 

 

간격을 설정할수있는 코드를 활용해보자.

 

 

 

판다스의 timedelta_range 함수도 날짜를 나타내는 함수 중 하나다. 

 

in:

pd.timedelta_range(0, periods=10, freq= '2H30T')

out:

TimedeltaIndex(['0 days 00:00:00', '0 days 02:30:00', '0 days 05:00:00',
                '0 days 07:30:00', '0 days 10:00:00', '0 days 12:30:00',
                '0 days 15:00:00', '0 days 17:30:00', '0 days 20:00:00',
                '0 days 22:30:00'],
               dtype='timedelta64[ns]', freq='150T')

# 함수는 (시작 시간, 간격수, 간격기준) 으로 이루어져있다.

# freq로 설정한 값인 '2H30T'는 2시간 30분이라는 뜻이다.

 

 

freq 파라미터에 일 간격을 뜻하는 'D'를 넣어보자

 

in:

pd.timedelta_range(0, periods=10, freq= 'D')

out:

TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days', '5 days',
                '6 days', '7 days', '8 days', '9 days'],
               dtype='timedelta64[ns]', freq='D')

 

 

 

 

 

댓글