시계열 데이터 자르기 개요
시계열(time series) 데이터가 포함된 데이터프레임이 있을 때, 판다스의 truncate() 함수를 사용하면 지정한 인덱스 값을 기준으로 데이터를 간단하게 잘라낼 수 있습니다. 예를 들어 아래와 같은 데이터프레임이 있고, 잘라낸 후의 결과가 다음과 같다고 가정해 보겠습니다.
before truncate: Id time_series 0 1 2020-01-05 1 2 2020-01-12 2 3 2020-01-19 3 4 2020-01-26 4 5 2020-02-02 5 6 2020-02-09 6 7 2020-02-16 7 8 2020-02-23 8 9 2020-03-01 9 10 2020-03-08 after truncate: Id time_series 1 2 2020-01-12
해결 방법
이 문제는 아래 단계를 따라 해결할 수 있습니다.
데이터프레임 정의: Id 열을 가진 데이터프레임을 생성합니다.
주간 날짜 생성: date_range 함수에 start='01/01/2020', periods=10을 지정하고 freq='W'를 설정합니다. 이렇게 하면 시작 날짜부터 일주일 간격의 열 개 날짜가 생성되어 df['time_series'] 열에 저장됩니다.
df['time_series'] = pd.date_range('01/01/2020',
periods=10,
freq='W')
truncate 적용: df.truncate() 함수에 before='01/01/2020', after='10/02/2020'이라는 인덱스 값을 넣어 호출하고, 그 결과를 result 변수에 저장합니다.
result = df.truncate(before='01/01/2020', after='10/02/2020')
예제
아래 전체 코드를 실행하면 위 과정을 한눈에 확인할 수 있습니다.
import pandas as pd
d = {'Id': [1,2,3,4,5,6,7,8,9,10]}
df = pd.DataFrame(d)
df['time_series'] = pd.date_range('01/01/2020',
periods=10,
freq='W')
print(df)
result = df.truncate(before='01/01/2020', after='10/02/2020')
print(result)
출력
before truncate: Id time_series 0 1 2020-01-05 1 2 2020-01-12 2 3 2020-01-19 3 4 2020-01-26 4 5 2020-02-02 5 6 2020-02-09 6 7 2020-02-16 7 8 2020-02-23 8 9 2020-03-01 9 10 2020-03-08 after truncate: Id time_series 1 2 2020-01-12
참고: truncate() 함수의 동작 원리
truncate()는 기본적으로 데이터프레임의 인덱스(index)를 기준으로 동작합니다. before로 지정한 값 이상, after로 지정한 값 이하의 인덱스만 남기고 나머지 행은 모두 제거됩니다. 날짜 문자열 대신 숫자 인덱스(예: before=1, after=5)를 사용할 수도 있으며, axis 인자를 조정하면 열(column) 기준으로도 데이터를 자를 수 있습니다.