Pandas의 DateTimeIndex.floor() 메서드를 사용하면 날짜·시간 인덱스를 지정한 빈도 단위로 내림(floor) 처리할 수 있습니다. 시간(hourly) 빈도를 기준으로 내림하려면 freq 매개변수에 'H' 값을 전달하면 됩니다.
이 글에서는 20분 간격으로 생성된 DateTimeIndex를 시간 단위로 내림하는 과정을 예제와 함께 살펴보겠습니다.
1. 라이브러리 가져오기
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
2. DateTimeIndex 생성
시작 시점을 '2021-09-29 07:20:32.261811624'로 하고, 기간(periods)은 5개, 빈도는 20분('20min'), 시간대(timezone)는 'Australia/Adelaide'로 설정하여 DatetimeIndex를 생성합니다.
datetimeindex = pd.date_range('2021-09-29 07:20:32.261811624', periods=5,
tz='Australia/Adelaide', freq='20min')생성된 DateTimeIndex를 출력해 확인해 보겠습니다.
print("DateTimeIndex...\n", datetimeindex)3. 시간 빈도로 floor 연산 수행
DateTimeIndex에 대해 시간 빈도로 내림 연산을 수행합니다. 시간 빈도를 나타내려면 freq='H'를 사용합니다.
print("\nPerforming floor operation with hourly frequency...\n",
datetimeindex.floor(freq='H'))전체 예제 코드
지금까지의 내용을 하나로 합친 전체 코드는 다음과 같습니다.
import pandas as pd
# 기간 5개, 빈도 20분(min)인 DatetimeIndex 생성
# 시간대는 Australia/Adelaide
datetimeindex = pd.date_range('2021-09-29 07:20:32.261811624', periods=5,
tz='Australia/Adelaide', freq='20min')
# DateTimeIndex 출력
print("DateTimeIndex...\n", datetimeindex)
# DateTimeIndex 빈도 출력
print("DateTimeIndex frequency...\n", datetimeindex.freq)
# 시간 빈도로 floor 연산 수행
# 시간 빈도에는 'H' 사용
print("\nPerforming floor operation with hourly frequency...\n",
datetimeindex.floor(freq='H'))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DateTimeIndex... DatetimeIndex(['2021-09-29 07:20:32.261811624+09:30', '2021-09-29 07:40:32.261811624+09:30', '2021-09-29 08:00:32.261811624+09:30', '2021-09-29 08:20:32.261811624+09:30', '2021-09-29 08:40:32.261811624+09:30'], dtype='datetime64[ns, Australia/Adelaide]', freq='20T') DateTimeIndex frequency... <20 * Minutes> Performing floor operation with hourly frequency... DatetimeIndex(['2021-09-29 07:00:00+09:30', '2021-09-29 07:00:00+09:30', '2021-09-29 08:00:00+09:30', '2021-09-29 08:00:00+09:30', '2021-09-29 08:00:00+09:30'], dtype='datetime64[ns, Australia/Adelaide]', freq=None)
결과 해석
출력 결과를 보면 원래 인덱스는 07:20:32부터 시작해 20분 간격으로 증가하지만, floor(freq='H')를 적용한 후에는 모든 타임스탬프가 가장 가까운 정각(시 단위)으로 내림된 것을 확인할 수 있습니다. 예를 들어 07:20:32와 07:40:32는 모두 07:00:00으로, 08:00:32 이후의 값들은 08:00:00으로 변환됩니다.
참고로 floor 연산이 적용된 새 인덱스는 고정된 빈도 정보를 유지하지 않으므로 freq=None으로 표시됩니다. 분 단위 내림이 필요하다면 freq='T'(또는 'min'), 일 단위라면 freq='D'처럼 원하는 빈도 문자열을 자유롭게 지정할 수 있습니다.