在while循环中使用datetime.time()



使用pandas数据框架,我有一个像这样的while条件:

while (i+1<len(df.index)) and (pr<pb and pr>sl) and (df['Buy/Sell'].iloc[i+1]!=2):

我想添加另一个条件,df['Time']应该早于15:25。我通过以下方式获得df['Time']:

df['Time'] = df.apply(lambda x:datetime.datetime.strptime(x['Time'],'%d-%m-%Y %H:%M:%S'), axis=1)

当我在while循环中添加以下条件时:

and (df['Time']<datetime.time(15,25,0)):

我得到以下错误:

TypeError: Cannot convert input to Timestamp

编辑:我正在根据while循环在数据框中的其他列中的值做一些事情。如果'time'列中的时间达到15:27,或者前面提到的其他条件不再成立,我需要停止。如果我不需要15:27条件,我的代码工作得很好。

注意:df.dtypes返回以下内容:

Time datetime64[ns]

编辑:做

`while (i+1<len(df.index)) and (pr<pb and pr>sl) and df['Buy/Sell'].iloc[i+1]!=2) and df['time'].dt.time<datetime.time(15,27,0))`

我现在得到这个错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

你会得到错误,因为这一行:

and (df['Time']<datetime.time(15,25,0)):

首先,你想比较time组件,而不是datetime与时间对象,其次,你不能比较标量与数组类对象,所以你想做以下事情:

df.loc[i, 'time'].time() < datetime.time(15,25,0)

这将访问单行值,然后访问time属性。

理想情况下,您不希望逐行迭代,如果可能的话,重写您的筛选并使用dt访问器来获取整个系列的time属性:

df.loc[df['Time'].dt.time < datetime.time(15,25,0)]将过滤整个df

相关内容

  • 没有找到相关文章

最新更新