Как создать объект datetime, эквивалентный numpy.nan, без использования Pandas? - PullRequest
0 голосов
/ 11 января 2019

При наличии массива числовых данных можно получить индексы массива, которые соответствуют определенному условию. Принимая np.nan как type <float>, эти условия все еще могут быть выполнены. Я хотел бы использовать подобный метод, используя объекты datetime вместо числовых данных.

В качестве примера рассмотрим следующее:

import numpy as np
import datetime

# sample data
x = np.linspace(-5, 5, 11).astype(int)
y = x**2
z = y.copy().astype(float)
z[0] = np.nan

# check that nan condition is correctly satisfied
print("\nZ:\n{}\n".format(z))
print("\nZ > 0:\n{}\n".format(z > 0))
print("\nZ < 0:\n{}\n".format(z < 0))
print("\nZ = 0:\n{}\n".format(z == 0))

# get number of elapsed hours between two datetime objects
dt0 = datetime.datetime(2018, 1, 11, 23, 59, 59)
dt1 = datetime.datetime(2018, 1, 12, 23, 59, 59)
hr_delta = (dt1 - dt0).total_seconds() // 3600
print("\n{} - {} = {} hours".format(dt1, dt0, hr_delta))

Начиная с np.nan - 5 = np.nan, мне было бы очень удобно использовать эту идею для создания недопустимого объекта datetime. Однако для объектов datetime требуются входные данные типа <int>, тогда как np.nan равен type <float>. Пример ниже воссоздает источник моей проблемы:

# attempt to instantiate invalid datetime object
dt2 = datetime.datetime(np.nan, 1, 11, 23, 59, 59)

который бросает TypeError: integer argument expected, got float. Есть ли способ сделать это без использования панд, как предложено в этом альтернативном посте ? Просто, чтобы уточнить, моя цель - создать недопустимый объект datetime, чтобы его вычитание или сложение с допустимым объектом datetime возвращало значение, подобное nan.

1 Ответ

0 голосов
/ 11 января 2019

Все, что делает панда, обычно делает Нампи.

В этом случае вам нужно сохранить правильный тип, который не datetime, а np.datetime64. Если у вас есть этот тип, вы можете заполнить NaT значения np.datetime64("NaT"), а затем использовать np.isnat, чтобы проверить, является ли значение временем или нет.

datetime само по себе не дает понятия «не время», вы должны использовать тип, который это делает. Вы должны быть в состоянии использовать np.datetime64 в тесной манере как datetime.

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