Написал небольшую временную дельта-функцию и хочу записывать результаты в виде массива numpy

#python #numpy #datetime

#python #numpy #дата и время

Вопрос:

У меня есть написанный некоторый код, который принимает два списка data_dict, один из которых содержит время открытия, а другой — время закрытия.

Функции находят разницу между этими двумя временами и возвращают цифру в часах X.X часов.

ЕСЛИ время открытия и закрытия в списках не в правильном формате (00:00:00), то функция возвращает ‘-1’.

Это работает отлично, однако я хочу иметь возможность записывать результаты и сохранять их в виде массива numpy.

Результаты печатаются следующим образом…

 X
Y
Z
A
X
etc...
  

Я очень новичок в python и просто нуждаюсь в некотором руководстве.

Спасибо, ребята.

 opening_time_arr = data_dict['Open']
closing_time_arr = data_dict['Close']

if len(opening_time_arr) == len(closing_time_arr):
    resultTime = []
for idx, closing_time in enumerate(closing_time_arr):
    try:
        FORMAT = '%H:%M:%S'
        tdelta = datetime.strptime(closing_time, FORMAT) - datetime.strptime(opening_time_arr[idx], FORMAT)
        resultTime.append(tdelta)
        tdelta_h = tdelta.total_seconds()/3600
        print(tdelta_h)
    except ValueError:
        print('-1')
  

Функция возвращает

 8.0
8.5
6.5
7.5
  

и так далее… существует около 250 записей.

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

Комментарии:

1. Соберите их в список, а затем создайте из него Numpy ndarray.

2. Как я уже сказал, новичок в python. Я бы понятия не имел, как это сделать. Мне потребовалось несколько часов, чтобы написать это в одиночку.

3. Что такое resultTime ? Учебное пособие по Numpy

4. Если я это сделаю, то все, что он фиксирует, — это временные дельты, а не значения… array([datetime.timedelta(секунды = 28800), datetime.timedelta(секунды = 30600), datetime.timedelta(секунды = 23400) и т.д… как я могу преобразовать в часы?

Ответ №1:

Оливер — Я думаю, ты был действительно близок! Если tdelta_h это ваш результат в часах, то это то, к чему вы хотите добавить resultTime . После завершения цикла for вы можете преобразовать список в массив numpy np.array() с помощью, а затем распечатать массив, если хотите убедиться, что он выглядит нормально.

Вот как, я думаю, это должно выглядеть все вместе:

 import numpy as np
opening_time_arr = data_dict['Open']
closing_time_arr = data_dict['Close']

if len(opening_time_arr) == len(closing_time_arr):
    resultTime = []
for idx, closing_time in enumerate(closing_time_arr):
    try:
        FORMAT = '%H:%M:%S'
        tdelta = (datetime.strptime(closing_time, FORMAT) - datetime.strptime(opening_time_arr[idx], FORMAT))

        tdelta_h = tdelta.total_seconds()/3600
        resultTime.append(tdelta_h)

    except ValueError:
        resultTime.append(-1)

np.array(resultTime)
print(resultTime)
  

Надеюсь, это поможет 🙂