我是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'
答案 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]