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

时间:2015-07-13 09:37:13

标签: python datetime pandas

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

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 ['时间']:

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循环对数据框中其他列中的值执行某些操作。如果“时间”栏中的时间达到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().

1 个答案:

答案 0 :(得分:1)

由于此行,您收到错误:

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

首先,您要将time组件而不是日期时间与时间对象进行比较,其次,您无法将标量与类似对象的数组进行比较,因此您需要执行以下操作:

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