Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python Pandas - Tính PeriodDelta: hiệu giữa DateTimeIndex và PeriodArray

Để tính TimedeltaArray biểu diễn hiệu giữa các giá trị DateTimeIndex và phiên bản PeriodArray của nó tại tần suất chỉ định, dùng DateTimeIndex.to_perioddelta(freq).

Các bước thực hiện

1. Import thư viện

import pandas as pd

2. Tạo DateTimeIndex

datetimeindex = pd.date_range(
    '2021-10-18 07:20:32.261811624',
    periods=5,
    freq='2Y'
)

3. Tính PeriodDelta với tần suất tháng ('M')

print("\nPeriodDelta (freq='M')...\n",
      datetimeindex.to_perioddelta(freq='M'))

Ví dụ hoàn chỉnh

import pandas as pd

datetimeindex = pd.date_range(
    '2021-10-18 07:20:32.261811624',
    periods=5,
    freq='2Y'
)

print("DateTimeIndex...\n", datetimeindex)
print("DateTimeIndex frequency...\n", datetimeindex.freq)

# Chuyển sang Period (tháng)
print("\nDateTimeIndex to Period (freq='M')...\n",
      datetimeindex.to_period(freq='M'))

# Tính PeriodDelta
print("\nDateTimeIndex to PeriodDelta (freq='M')...\n",
      datetimeindex.to_perioddelta(freq='M'))

Kết quả đầu ra

DateTimeIndex...
DatetimeIndex(['2021-12-31 07:20:32.261811624', '2023-12-31 07:20:32.261811624',
               '2025-12-31 07:20:32.261811624', '2027-12-31 07:20:32.261811624',
               '2029-12-31 07:20:32.261811624'],
              dtype='datetime64[ns]', freq='2A-DEC')

DateTimeIndex to Period (freq='M')...
PeriodIndex(['2021-12', '2023-12', '2025-12', '2027-12', '2029-12'], dtype='period[M]')

DateTimeIndex to PeriodDelta (freq='M')...
TimedeltaIndex(['30 days 07:20:32.261811624', '30 days 07:20:32.261811624',
                '30 days 07:20:32.261811624', '30 days 07:20:32.261811624',
                '30 days 07:20:32.261811624'],
               dtype='timedelta64[ns]', freq=None)

Giải thích

  • to_period(freq='M'): Chuyển mỗi timestamp thành Period tháng (ví dụ: 2021-12-31 → 2021-12)
  • to_perioddelta(freq='M'): Tính hiệu timestamp - period_start. Với freq='M', period_start là 00:00 ngày 1 của tháng đó. Kết quả là TimedeltaIndex thể hiện độ lệch từ đầu tháng.
  • Trong ví dụ: Tất cả đều là 31/12 07:20:32 → lệch 30 ngày 7h20m32s từ 1/12.

Ứng dụng: Phân tích mùa vụ, so sánh thời điểm trong chu kỳ (ngày trong tháng, giờ trong ngày...).