판다스 데이터프레임에서 날짜와 시간 형식으로 바꾸고 계산하기

2019. 5. 14. 06:35

판다스 데이터 프레임에서 날짜와 시간을 다루는 것은 자주 하지 않습니다. 그래서 할 때마다 찾아보게 되는데요. 날짜와 시간 타입으로 만들고, 기간을 더하고 빼는 등의 계산하는 법이 필요합니다. 판다스 데이터 프레임에서 날자와 시간을 다루는 방법을 정리해 보았습니다.

 

 

숫자와 문자형의 데이터 타입으로 모든 작업을 할 수 있으면 좋곘지만, 날짜와 시간의 특수성으로 해당 데이터 타입이 필요할 때가 있습니다. 날짜와 시간 데이터 타입을 만드는 방법과 계산하는 방법을 차례대로 알아보겠습니다.

 

1. 날짜와 시간 만들기

데이터 프레임에 숫자나 문자로 날짜가 있다면, 이 데이터를 이용해서 날짜와 시간 형식의 데이터를 만들 수 있습니다. 먼저 "2019-05-13"과 같은 문자열로 만들고, asttype("datetime~")을 이용하면 datetime형식으로 만들 수 있습니다.

 

> import pandas as pd
> df = pd.DataFrame(data=[20161011, 20171013, 20181031], columns=["d"])
> df["d"] = df["d"].astype(str)
> df["date"] = df["d"].str[0:4] + "-" + df["d"].str[4:6] + "-" + df["d"].str[6:8]
> df["date"] = df["date"].astype('datetime64[ns]')

 

날짜와 시간을 만들 수 있는 값이 없다면, 새로 만드는 것도 가능합니다. date_range나 period_range함수를 이용하면 특정 기간에 대해 일정한 간격으로 데이터를 만들 수 있습니다.

 

> pd.Series(pd.date_range('2000', freq='D', periods=3))
> pd.Series(pd.date_range('1/1/2011', freq='M', periods=3))
> pd.Series(pd.period_range('1/1/2011', freq='M', periods=3))

 

 

2. 날짜와 시간 계산하기

날자와 시간은 그 특수성 때문에 숫자로 계산하는 것이 쉽지 않습니다. 우리가 쉽게 생각하는 연초, 연말과 같은 개념도 숫자로 계산하려면 복잡해지는데요. 판다스에는 다행히 이러한 내용들이 미리 정의돼 있습니다.

 

1) 날짜와 시간 더하거나 빼기

날짜와 시간을 더하거나 뺄 때는 DateOffset함수를 이용합니다. DateOffset함수의 입력 인자로 원하는 기간을 입력하는 것입니다. 예를 들면 아래와 같습니다.

 

> df["date_1m"] = df["date"] + pd.DateOffset(months=1)
> df["date_1d"] = df["date"] + pd.DateOffset(days=1)
> df["date_1y"] = df["date"] + pd.DateOffset(years=1)

 

2) 필요한 날짜와 시간 정의 찾기

날짜와 시간에는 더하고 빼는 것 외에 특수한 작업들이 필요할 수 있습니다. 예를 들면 요일을 찾는다거나 월말, 몇 번째 주인지 등 쉽게 찾을 수 없는 값들이 많습니다. 이럴 때는 아래와 같은 날짜와 시간 속성에 사용할 수 있는 항목을 이용하면 좋습니다. 사용할 때는 "데이터프레임명[칼럼명].dt.항목명" 과 같이 사용하면 됩니다.

 

> df["date].dt.year

 

위의 방법으로 사용할 수 있는 항목은 아래와 같습니다.

 

날짜_시간_property
날짜와-시간-property

 

이 외에도 DateOffset도 사용할 수 있습니다. 사용방법은 아래와 같습니다. 'pd.offsets.함수명'을 날짜에 더해주는 방식입니다.

 

> df["date_wd"] = df["date"] + pd.offsets.weekday()

 

위의 방법으로 사용할 수 있는 항목들은 아래와 같습니다.

 

DateOffsets함수들
DateOffsets-함수들

 

오늘은 이렇게 판다스 데이터 프레임에서 날짜와 시간 데이터 타입으로 바꾸고 계산하는 방법에 대해서 알아보았습니다. 방법만 알면 어렵지 않으나, 자주 사용하지 않다 보니 헷갈립니다. 날짜와 시간을 계산해야 된다면 복잡하게 계산하지 말고, 위에 항목이나 함수들을 이용하면 쉽게 할 수 있습니다.