#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
? Учебное пособие по Numpy4. Если я это сделаю, то все, что он фиксирует, — это временные дельты, а не значения… 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)
Надеюсь, это поможет 🙂