Як обчислити середнє значення pandas pd.Timestamp

Проблема

Якщо у вас є масив об’єктів pd.Timestamp, ви не можете безпосередньо обчислити середнє значення, оскільки їх не можна безпосередньо підсумувати:

average_timestamp_problem.py
import pandas as pd

# Створення масиву з п'яти фіксованих об'єктів pd.Timestamp
timestamps = [
    pd.Timestamp('2023-01-01 12:00:00'),
    pd.Timestamp('2023-01-02 12:00:00'),
    pd.Timestamp('2023-01-03 12:00:00'),
    pd.Timestamp('2023-01-04 12:00:00'),
    pd.Timestamp('2023-01-05 12:00:00')
]

# НЕВДАЧА: Це викличе TypeError
average = sum(timestamps) / len(timestamps)

Це викличе TypeError:

error.txt
TypeError                                 Traceback (most recent call last)
Cell In[1], line 13
      4 timestamps = [
      5     pd.Timestamp('2023-01-01 12:00:00'),
      6     pd.Timestamp('2023-01-02 12:00:00'),
   (...)
      9     pd.Timestamp('2023-01-05 12:00:00')
     10 ]
     12 # FAIL: This will raise a TypeError
---> 13 average = sum(timestamps) / len(timestamps)

File timestamps.pyx:483, in pandas._libs.tslibs.timestamps._Timestamp.__radd__()

File timestamps.pyx:465, in pandas._libs.tslibs.timestamps._Timestamp.__add__()

TypeError: Addition/subtraction of integers and integer-arrays with Timestamp is no longer supported.  Instead of adding/subtracting `n`, use `n * obj.freq`

Рішення

Ви можете підсумовувати/знаходити середнє ts.value замість безпосереднього підсумовування ts, а після знаходження середнього перетворити його назад на timestamp:

average_timestamp_solution.py
average = pd.Timestamp(sum(ts.value for ts in timestamps) / len(timestamps))

Повний приклад:

average_timestamp_full_example.py
import pandas as pd

# Створення масиву з п'яти фіксованих об'єктів pd.Timestamp
timestamps = [
    pd.Timestamp('2023-01-01 12:00:00'),
    pd.Timestamp('2023-01-02 12:00:00'),
    pd.Timestamp('2023-01-03 12:00:00'),
    pd.Timestamp('2023-01-04 12:00:00'),
    pd.Timestamp('2023-01-05 12:00:00')
]

# Результат: Timestamp('2023-01-03 12:00:00')
average = pd.Timestamp(sum(ts.value for ts in timestamps) / len(timestamps))

Дивіться схожі статті за категоріями: Pandas Python