Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Pandas TimeDeltaIndex에서 시간(Hourly) 단위 빈도로 Ceil(올림) 연산 수행하는 방법

개요

Pandas에서 TimeDeltaIndex 객체의 각 timedelta 값을 시간(hour) 단위로 올림 처리하려면 ceil() 메서드를 사용하면 됩니다. 이때 freq 매개변수에 'H'(hourly, 시간당 빈도)를 지정하면 각 값을 가장 가까운 다음 정각으로 올릴 수 있습니다.

예를 들어 '4 days 08:20:00'이라는 값은 시간 단위로 올림하면 '4 days 09:00:00'이 됩니다.

1단계: 필요한 라이브러리 가져오기

먼저 pandas 라이브러리를 임포트합니다.

import pandas as pd

2단계: TimeDeltaIndex 객체 생성

data 매개변수에 timedelta 형식의 문자열 리스트를 전달하여 TimeDeltaIndex 객체를 생성합니다.

tdIndex = pd.TimedeltaIndex(data =['4 day 8h 20min 35us 45ns', '+17:42:19.999999',
'9 day 3h 08:16:02.000055', '+22:35:25.000075'])

3단계: TimeDeltaIndex 출력하기

생성된 TimeDeltaIndex 객체를 화면에 출력해 확인합니다.

print("TimedeltaIndex...\n", tdIndex)

4단계: 시간 단위 빈도로 Ceil 연산 수행

freq='H' 옵션을 지정하여 각 timedelta 값을 시간(hour) 단위로 올립니다.

print("\nPerforming Ceil operation with hourly frequency...\n",
tdIndex.ceil(freq='H'))

전체 예제 코드

지금까지의 과정을 하나의 코드로 정리하면 다음과 같습니다.

import pandas as pd

# TimeDeltaIndex 객체 생성
# data 매개변수로 timedelta 형식의 데이터를 설정합니다.
tdIndex = pd.TimedeltaIndex(data =['4 day 8h 20min 35us 45ns', '+17:42:19.999999',
'9 day 3h 08:16:02.000055', '+22:35:25.000075'])

# TimeDeltaIndex 출력
print("TimedeltaIndex...\n", tdIndex)

# Timedelta의 구성 요소(days, hours 등)를 데이터프레임으로 반환
print("\nThe Dataframe of the components of TimeDeltas...\n", tdIndex.components)

# 시간(hourly) 빈도로 Ceil 연산 수행
# freq 매개변수에 'H'를 사용합니다.
print("\nPerforming Ceil operation with hourly frequency...\n",
tdIndex.ceil(freq='H'))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

TimedeltaIndex...
TimedeltaIndex(['4 days 08:20:00.000035045', '0 days 17:42:19.999999',
'9 days 11:16:02.000055', '0 days 22:35:25.000075'],
dtype='timedelta64[ns]', freq=None)

The Dataframe of the components of TimeDeltas...
    days hours minutes seconds milliseconds microseconds nanoseconds
0     4     8     20        0            0             35           45
1     0    17     42       19          999            999            0
2     9    11     16        2            0             55            0
3     0    22     35       25            0             75            0

Performing Ceil operation with hourly frequency...
TimedeltaIndex(['4 days 09:00:00', '0 days 18:00:00', '9 days 12:00:00',
'0 days 23:00:00'],
dtype='timedelta64[ns]', freq=None)

결과 해석

실행 결과를 보면 각 timedelta 값이 다음 정각으로 올림된 것을 확인할 수 있습니다.

  • '4 days 08:20:00.000035045' → '4 days 09:00:00'
  • '0 days 17:42:19.999999' → '0 days 18:00:00'
  • '9 days 11:16:02.000055' → '9 days 12:00:00'
  • '0 days 22:35:25.000075' → '0 days 23:00:00'

즉, 밀리초·마이크로초·나노초 등 나머지 값이 존재하는 경우 해당 시간의 다음 정각으로 반올림(올림)되며, 이미 정각인 경우에는 그대로 유지됩니다. 이 방법은 로그 데이터 정규화나 시간 구간 집계 작업에서 유용하게 활용할 수 있습니다.