맨땅에 헤딩하는 사람

[Python] pandas로 날짜 리스트 만들기 본문

파이썬/이론

[Python] pandas로 날짜 리스트 만들기

purplechip 2020. 5. 3. 11:27

순차적인 데이터를 갖는 리스트를 만드는 방법은 여러가지가 있다. 

필자의 경우 list comprehension을 사용해서 리스트를 생성한다.

아래 코드는 list comprehension을 사용해서 1-30 중 10의 배수를 제외한 리스트를 만드는 방법이다.

 

>>> print([i for i in range(1,31) if i%10 != 0])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29]

 

이와 같이 숫자나 문자 데이터를 갖는 리스트를 생성할 경우 위와 같은 방법은 굉장히 효과적이다.

 

 

그러나 일정 기간의 날짜 리스트, 즉 날짜와 날짜 사이의 리스트를 만들기 위해서는 상당히 복잡해진다.

pandas에서는 이런 고민을 쉽게 해결할 수 있도록  date_range  라는 함수를 제공한다.

pandas.date_range (start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs)
 → pandas.core.indexes.datetimes.DatetimeIndex (return type)

start, end, period 중 2가지가 입력값으로 존재해야 함수가 동작한다. 

start는 시작 날짜,

end는 종료 날짜,

period는 생성되는 날짜 range의 개수

라 생각하면 된다. 

>>> pd.date_range('20200101', datetime.date(2020,1,15), freq='B')               # 주중 
Out[20]: 
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06',
               '2020-01-07', '2020-01-08', '2020-01-09', '2020-01-10',
               '2020-01-13', '2020-01-14', '2020-01-15'],
              dtype='datetime64[ns]', freq='B')

 

>>> pd.date_range('2020-01-01', '01/15/2020', freq='W')         # 일요일
Out[21]: DatetimeIndex(['2020-01-05', '2020-01-12'], dtype='datetime64[ns]', freq='W-SUN')

 

>>> pd.date_range('2020-01-01', periods=3)             # 일일
Out[23]: DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03'], dtype='datetime64[ns]', freq='D')

위 함수의 좋은 점은 start, end parameter가 자유롭다는 것이다. 우리가 보편적으로 생각하는 날짜의 문자열 형식을 대부분 수용한다.

 

생성된 타입은 dataindex로 이를 tuple()이나 list() 혹은 to_list 함수 등을 사용해서 원하는 타입으로 변경해주면 된다.

 

또한 freq parameter 값에 따라 다양한 날짜 리스트를 생성하는 강력한 기능 역시 제공한다.

위 예시는 주중('B'), 일요일('W'), 일일('D')을 표현하고자 할 때 사용하는 freq 값이다.

freq에 대한 내용은 다음 표를 참고하면 된다.

B

business day frequency

C

custom business day frequency

D

calendar day frequency

W

weekly frequency

M

month end frequency

SM

semi-month end frequency (15th and end of month)

BM

business month end frequency

CBM

custom business month end frequency

MS

month start frequency

SMS

semi-month start frequency (1st and 15th)

BMS

business month start frequency

CBMS

custom business month start frequency

Q

quarter end frequency

BQ

business quarter end frequency

QS

quarter start frequency

BQS

business quarter start frequency

A, Y

year end frequency

BA, BY

business year end frequency

AS, YS

year start frequency

BAS, BYS

business year start frequency

BH

business hour frequency

H

hourly frequency

T, min

minutely frequency

S

secondly frequency

L, ms

milliseconds

U, us

microseconds

N

nanoseconds

 

 

참고

date_range

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.date_range.html

Comments