在Pandas日期时间序列项上调用函数进行过滤

时间:2019-03-22 14:27:27

标签: python pandas

                 Date_Time     Open     High      Low    Close    Up  Down
0      2018-03-20 17:01:00  2723.25  2724.50  2723.25  2723.75   372   345
1      2018-03-20 17:02:00  2723.75  2724.25  2723.50  2724.00   127    49
2      2018-03-20 17:03:00  2724.00  2724.00  2723.75  2723.75    55    11
3      2018-03-20 17:04:00  2724.00  2724.50  2724.00  2724.00   105    25
...

我想过滤上面的数据,以便排除时间不在15:00:00和17:00:00之间的每一行。

我已经尝试过了:

df.loc[df.Date_Time.time() > time(15, 0) & df.Date_Time.time() < time(17, 0)]

自然,这将不起作用,因为他尝试在熊猫系列而非元素上调用time()

  

AttributeError:“系列”对象没有属性“时间”

所以,我认为我可以应用lambda函数:

df.apply(lambda x: x['Date_Time'].time() > time(15, 0))

但这也不起作用。

  

KeyError :(“日期时间”,“发生在索引日期时间”)

这也是:

df.apply(lambda x: x.Date_Time.time() < time(15, 0))

不起作用,我真的不明白为什么我遇到了另一个错误。

  

AttributeError :(““系列”对象没有属性“ Date_Time””,   “发生在索引Date_Time”)

是否可以只一行完成?还是我必须“手动”遍历整个意甲?

2 个答案:

答案 0 :(得分:2)

我认为您可以在pandas中通过between_time进行检查

df.set_index(['Date_Time']).between_time('15:00:00', '17:00:00')

答案 1 :(得分:0)

出于某种原因我忽略了,使用axis=1似乎可以解决问题。

filter = df.apply(lambda x: x['Date_Time'].time() > time(15, 0) and x['Date_Time'].time() < time(17, 0), axis=1)

然后我可以打电话给df.loc[filter]