Python

Pandas : 데이터 집계 - 주간 집계하기, string -> datetime 타입변환

Sorting 2021. 11. 28. 16:12
반응형

데이터 분석을 진행하면서, 일간 데이터를 주간 데이터로 재가공할 일이 있었다.

 

Pandas 에서는 다음과 같이 데이터를 리샘플링(resample)할 수 있었다.

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.resample.html

 

pandas.DataFrame.resample — pandas 1.3.4 documentation

Which side of bin interval is closed. The default is ‘left’ for all frequency offsets except for ‘M’, ‘A’, ‘Q’, ‘BM’, ‘BA’, ‘BQ’, and ‘W’ which all have a default of ‘right’. Which bin edge label to label bucket with. Th

pandas.pydata.org

 

내가 사용할 수준만 정리하면 다음과 같다.

일단 더미데이터를 다음과 같이 간단히 준비하려 한다.

import pandas as pd

df= pd.DataFrame()

t = []
for e in range(1, 30):
    t.append(f"2021-1-{e}")

df["time"] = t
df["data"] = [e for e in range(30 - 1)]

 

현재 df 데이터 프레임의 각 컬럼 별 타입은 다음과 같다.

 

time 컬럼은 현재 문자열 (object) 타입이다.

 

이걸 datetime 타입 등의 시계열 타입으로 일단 변경해야, 

resample() 함수를 사용할 수 있다.

 

pandas.to_datetime() 함수를 사용해서 

다음과 같이 time 컬럼을 datetime 타입으로 바꿔주자.

df.time = pd.to_datetime(df.time)

 

이제 datetime 타입이 되었다.

 

 

이제 resample() 함수를 사용해서, 일주일 단위로 데이터를 재가공해보자.

 

resample() 함수는 디폴트로는 index 를 기준으로 집계를 진행하지만,

on 인자를 통해 샘플링 대상 컬럼을 지정할 수 있다.

또, 재집계 단위는 rule 인자로 지정할 수 있다.

 

time 컬럼을 이용해서, 1주일 단위로 재집계를 진행해보자.

집계 결과는 groupby 함수처럼 별개의 객체로 리턴되며,

이 객체를 통해 내가 원하는 결과를 얻을 수 있다.

 

나는 주간 데이터 합계가 필요하기 때문에, sum() 을 적용할 예정이다.

resampled = df.resample(rule='1W', on='time')
resampled.sum()

 

이렇게 일간 데이터를 주간 데이터로 바꿀 수 있다.

 

 

 

 

 

 

 

 

 

 

반응형