Как рассчитать средние значения datetime64 [нс] numpy .ndarray? - PullRequest
2 голосов
/ 31 марта 2020

Со следующими данными я хотел бы показать среднее и другие средние значения:

time = ['2020-01-01T00:00:00.000000000' '2020-01-02T00:00:00.000000000'
 '2020-01-03T00:00:00.000000000' '2020-01-04T00:00:00.000000000'
 '2020-01-05T00:00:00.000000000' '2020-01-06T00:00:00.000000000'
 '2020-01-07T00:00:00.000000000' '2020-01-08T00:00:00.000000000'
 '2020-01-09T00:00:00.000000000' '2020-01-10T00:00:00.000000000'
 '2020-01-11T00:00:00.000000000' '2020-01-12T00:00:00.000000000'
 '2020-01-13T00:00:00.000000000' '2020-01-14T00:00:00.000000000'
 '2020-01-15T00:00:00.000000000' '2020-01-16T00:00:00.000000000'
 '2020-01-17T00:00:00.000000000' '2020-01-18T00:00:00.000000000'
 '2020-01-19T00:00:00.000000000' '2020-01-20T00:00:00.000000000'
 '2020-01-21T00:00:00.000000000' '2020-01-22T00:00:00.000000000'
 '2020-01-23T00:00:00.000000000' '2020-01-24T00:00:00.000000000'
 '2020-01-25T00:00:00.000000000' '2020-01-26T00:00:00.000000000'
 '2020-01-27T00:00:00.000000000' '2020-01-28T00:00:00.000000000'
 '2020-01-29T00:00:00.000000000' '2020-01-30T00:00:00.000000000'
 '2020-01-31T00:00:00.000000000']

print(np.mean(time)) has an error: TypeError: cannot perform reduce with flexible type

Я думаю, что мне может понадобиться реализовать pandas / dataframe / slicing, однако я не уверен, как это сделать это.

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Вот один подход, основанный на преобразовании туда и обратно между Unix время

dt = np.array(time, dtype='datetime64')
delta_sec = np.timedelta64(1, 's')
epoch = '1970-01-01T00:00:00'
epoch_sec = (dt - np.datetime64(epoch)) / delta_sec
epoch_sec_mean = np.mean(epoch_sec)
dt_mean = np.datetime64(epoch) + np.timedelta64(int(epoch_sec_mean), 's')
print(dt_mean)

Выход

2020-01-16T00:00:00
2 голосов
/ 31 марта 2020

Сначала вам нужно добавить запятые между записями вашего списка. Тогда возможный вариант - использовать pandas:

import pandas as pd
import numpy as np

. Вы можете преобразовать свой список прикуса в список pandas datetime.

time_pd = pd.to_datetime(time)

Затем превратить это в целое число перечислите и выполните все расчеты, которые вы хотите. Например, вычисление среднего значения:

time_np = time_pd.astype(np.int64)

average_time_np = np.average(time_np)

average_time_pd = pd.to_datetime(average_time_np)
print(average_time_pd)

Что печатает: 2020-01-16 00:00:00

Конечно, есть способы привести строки времени непосредственно к numpy без использования pandas, но это решение, которое я мог бы найти без гораздо большего исследования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...