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

Python Pandas – 밀리초(ms) 빈도 단위로 TimeDeltaIndex 반올림하기

Pandas에서 TimeDeltaIndex를 밀리초(millisecond) 빈도 단위로 반올림하려면 TimeDeltaIndex.round() 메서드를 사용합니다. 이때 freq 매개변수에 'ms' 값을 지정하면 됩니다.

round() 메서드는 지정한 빈도 단위에 맞춰 각 timedelta 값을 가장 가까운 값으로 반올림(round)하며, 내림(floor)이나 올림(ceil)과 달리 사사오입 방식으로 처리된다는 점이 특징입니다.

1. 필요한 라이브러리 임포트

먼저 pandas 라이브러리를 가져옵니다.

import pandas as pd

2. TimeDeltaIndex 객체 생성

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

tdIndex = pd.TimedeltaIndex(data =['10 day 5h 2 min 3us 10ns', '+22:39:19.999999',
'2 day 4h 03:08:02.000045', '+07:20:32.261811624'])

3. TimeDeltaIndex 출력

생성된 TimedeltaIndex를 화면에 표시합니다.

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

4. 밀리초 빈도로 반올림 수행

밀리초 빈도로 반올림 연산을 수행합니다. freq 매개변수에 'ms'를 지정하면 나노초·마이크로초 단위의 값들이 가장 가까운 밀리초 값으로 반올림됩니다.

print("\n밀리초 빈도로 반올림 연산 수행...\n", tdIndex.round(freq='ms'))

전체 예제 코드

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

import pandas as pd

# TimeDeltaIndex 객체 생성
# data 매개변수에 timedelta 형태의 데이터를 설정
tdIndex = pd.TimedeltaIndex(data =['10 day 5h 2 min 3us 10ns', '+22:39:19.999999',
'2 day 4h 03:08:02.000045', '+07:20:32.261811624'])

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

# TimeDelta의 구성 요소(일, 시, 분, 초 등)를 데이터프레임으로 반환
print("\nTimeDelta 구성 요소 데이터프레임...\n", tdIndex.components)

# 밀리초 빈도로 반올림 연산 수행
print("\n밀리초 빈도로 반올림 연산 수행...\n", tdIndex.round(freq='ms'))

실행 결과

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

TimedeltaIndex...
TimedeltaIndex(['10 days 05:02:00.000003010', '0 days 22:39:19.999999',
'2 days 07:08:02.000045', '0 days 07:20:32.261811624'],
dtype='timedelta64[ns]', freq=None)

TimeDelta 구성 요소 데이터프레임...
    days hours minutes seconds milliseconds microseconds nanoseconds
0   10     5      2       0          0            3           10
1    0    22     39      19        999          999            0
2    2     7      8       2          0           45            0
3    0     7     20      32        261          811          624

밀리초 빈도로 반올림 연산 수행...
TimedeltaIndex([ '10 days 05:02:00', '0 days 22:39:20',
'2 days 07:08:02', '0 days 07:20:32.262000'],
dtype='timedelta64[ns]', freq=None)

결과 분석

실행 결과를 살펴보면 다음과 같은 변화가 있음을 확인할 수 있습니다.

  • '10 days 05:02:00.000003010' → 마이크로초·나노초가 잘려 '10 days 05:02:00'으로 반올림되었습니다.
  • '0 days 22:39:19.999999' → 999999마이크로초가 1초로 올려져 '0 days 22:39:20'이 되었습니다.
  • '2 days 07:08:02.000045' → 45마이크로초는 1밀리초 미만이므로 버려져 '2 days 07:08:02'가 되었습니다.
  • '0 days 07:20:32.261811624' → 261.811624밀리초가 가장 가까운 밀리초인 262로 반올림되어 '0 days 07:20:32.262000'이 되었습니다.

참고: freq 매개변수에 사용 가능한 주요 값

round() 메서드의 freq 매개변수에는 다음과 같은 별칭(alias)을 사용할 수 있습니다.

별칭의미
'ns'나노초(nanosecond)
'us'마이크로초(microsecond)
'ms'밀리초(millisecond)
's'초(second)
'min'분(minute)
'h'시간(hour)
'D'일(day)

이처럼 freq='ms'만 지정하면 TimeDeltaIndex의 모든 값을 손쉽게 밀리초 단위로 반올림할 수 있으며, 필요에 따라 다른 빈도 단위로도 동일한 방식으로 처리할 수 있습니다.