numpy:比较两个日期值返回TypeError:'int'和'datetime.datetime'实例之间不支持'> ='

时间:2018-09-25 05:58:58

标签: python numpy

我是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 :(得分:1)

您正在比较错误的对象。当numpy将日期时间对象转换成其自己的格式时,类似2018-09-25T11:48:44.959386000',请进一步了解here

为使它们兼容,在比较日期之前,请将日期转换为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')

答案 1 :(得分:1)

直接比较而不进行转换。

start_idx = np.where(df.index>=datetime.strptime('2018-09-27', "%Y-%m-%d"))[0][-1]