numpy: сравнение двух значений даты возвращает TypeError: '> =' не поддерживается между экземплярами int и datetime.datetime - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок в Python и NumPy.Во время практики я написал этот код:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(7), freq='D')

np.random.seed(seed=1111)
data = np.random.randint(1, high=100, size=len(days))
df = pd.DataFrame({'test': days, 'col2': data})
df = df.set_index('test')
print(df)
dates = np.array(df.index)
print(dates)
start_idx = np.where(dates>=datetime.strptime('2018-01-01', "%Y-%m-%d"))[0][-1]
print(start_idx)

, но он выдает следующую ошибку:

    Traceback (most recent call last):
  File "C:/Users/mohammadi/Desktop/sampleDF.py", line 15, in <module>
    start_idx = np.where(dates>=datetime.strptime('2018-01-01', "%Y-%m-%d"))[0][-1]
TypeError: '>=' not supported between instances of 'int' and 'datetime.datetime'

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Просто сравните напрямую без конвертации.

start_idx = np.where(df.index>=datetime.strptime('2018-09-27', "%Y-%m-%d"))[0][-1]
0 голосов
/ 25 сентября 2018

Вы сравниваете не те объекты.Поскольку numpy преобразует объекты даты и времени в свой собственный формат, например, 2018-09-25T11:48:44.959386000', Подробнее об этом здесь .

Чтобы сделать их совместимыми, прежде чем сравнивать даты, преобразуйте свою дату в numpy.datetime64 формат, а затем сравнить.Это должно решить проблему.

Так что измените вашу строку start_idx на эту, то есть строку 15 start_idx = np.where(dates>=np.datetime64(datetime.strptime('2018-01-01', "%Y-%m-%d")))[0][-1]

, или вы можете напрямую преобразовать дату как эта np.datetime64('2018-01-01')

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