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

Python Pandas – 밀리초(ms) 빈도로 DateTimeIndex에 ceil 올림 연산 수행하는 방법

Pandas에서 DateTimeIndex에 밀리초(ms) 빈도 기준으로 ceil(올림) 연산을 수행하려면 DateTimeIndex.ceil() 메서드를 사용하면 됩니다. 이때 밀리초 빈도를 지정하려면 freq 매개변수에 'ms' 값을 전달해야 합니다.

ceil 메서드는 지정한 빈도 단위로 타임스탬프를 가장 가까운 위쪽 값으로 올려주는 역할을 합니다. 예를 들어 나노초 단위의 세밀한 시간 값을 밀리초 단위로 반올림(올림) 처리할 때 유용하게 활용됩니다.

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

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

import pandas as pd

2. DatetimeIndex 생성

이제 periods=5(5개의 요소)와 빈도(freq)를 초 단위인 '40S'로 설정하여 DatetimeIndex를 생성합니다. 시간대(timezone)는 호주 애들레이드(Australia/Adelaide)로 지정합니다.

datetimeindex = pd.date_range('2021-10-18 07:20:32.261811624', periods=5,
tz='Australia/Adelaide', freq='40S')

생성된 인덱스는 시작 시점부터 40초 간격으로 5개의 타임스탬프를 포함하며, 나노초(nanosecond) 단위의 정밀한 시간 값을 가지고 있습니다.

3. 밀리초 빈도로 ceil 연산 수행

DatetimeIndex에 밀리초 빈도 기준으로 ceil 연산을 적용합니다. 밀리초 빈도를 위해 freq 매개변수에 'ms'를 사용합니다.

print("\n밀리초 빈도로 ceil 연산 수행...\n",
datetimeindex.ceil(freq='ms'))

전체 예제 코드

지금까지 설명한 내용을 하나로 합친 전체 코드는 다음과 같습니다.

import pandas as pd

# periods=5, 빈도는 초(S) 단위인 DatetimeIndex 생성
# 시간대는 Australia/Adelaide로 지정
datetimeindex = pd.date_range('2021-10-18 07:20:32.261811624', periods=5,
tz='Australia/Adelaide', freq='40S')

# DateTimeIndex 출력
print("DateTimeIndex...\n", datetimeindex)

# DateTimeIndex의 빈도 출력
print("DateTimeIndex frequency...\n", datetimeindex.freq)

# 밀리초 빈도로 ceil 연산 수행
# 밀리초 빈도에는 'ms' 사용
print("\n밀리초 빈도로 ceil 연산 수행...\n",
datetimeindex.ceil(freq='ms'))

실행 결과

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

DateTimeIndex...
DatetimeIndex(['2021-10-18 07:20:32.261811624+10:30',
'2021-10-18 07:21:12.261811624+10:30',
'2021-10-18 07:21:52.261811624+10:30',
'2021-10-18 07:22:32.261811624+10:30',
'2021-10-18 07:23:12.261811624+10:30'],
dtype='datetime64[ns, Australia/Adelaide]', freq='40S')
DateTimeIndex frequency...
<40 * Seconds>

Performing ceil operation with milliseconds frequency...
DatetimeIndex(['2021-10-18 07:20:32.262000+10:30',
'2021-10-18 07:21:12.262000+10:30',
'2021-10-18 07:21:52.262000+10:30',
'2021-10-18 07:22:32.262000+10:30',
'2021-10-18 07:23:12.262000+10:30'],
dtype='datetime64[ns, Australia/Adelaide]', freq=None)

결과 분석

출력 결과를 살펴보면 원래 타임스탬프의 소수점 이하 값이 .261811624였지만, 밀리초 빈도('ms')로 ceil 연산을 적용한 후 .262000으로 올림 처리된 것을 확인할 수 있습니다. 즉, 나노초 단위의 값이 다음 밀리초 경계로 올라갔습니다.

또한 ceil 연산이 적용된 새로운 DatetimeIndex는 freq=None으로 표시되는데, 이는 ceil 연산 후 원래의 규칙적인 빈도 정보가 유지되지 않기 때문입니다. 참고로 floor()는 내림, round()는 반올림을 수행하므로, 상황에 맞게 적절한 메서드를 선택하여 사용하시면 됩니다.