使用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().
答案 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