Pandas中的日期时间比较与datetime.time()相关

时间:2016-08-31 06:24:41

标签: python datetime pandas indexing time

我有一个大型的excel文件,包含马拉松选手的开始和结束时间。为了确定延迟开始时间后仍在课程中的跑步者数量,我尝试将数据导入Pandas并使用内置的pandas比较以返回在特定时间运行的跑步者列表。在给定时间x,跑道上的跑​​步者将具有开始时间< = x和终止时间> X。但是在熊猫中,其中一个给了我一个错误。

我使用read_exel从Excel导入数据框,自动将开始时间和结束时间转换为Datetime.time个对象。这是一些示例数据

df = pd.DataFrame(
{'name':['Bob','Sue','Joe'],
 'start_time':[datetime.time(6,50,0),datetime.t‌​ime(6,55,0),dateti‌​me.time(7,0,0)], 
 'start_time':[datetime.time(7,15,04),datetime.time(7,21,41)‌​,datetime.time(7,23,24)],})

跑步者从6:50开始,我希望每隔4分钟列出一次跑步者的数量。所以我设置了一些变量来处理:

race_start = datetime.datetime(100,1,1,6,50)
intervaul = datetime.timedelta(minutes = 4)
capture_time = race_start

然后我尝试使用内置选择中的Pandas选择正确的行

df[df.start_time <= capture_time.time() & df.end_time > capture_time.time()]

然而我收到错误:

  

TypeError:无法比较datetime.time和unicode

事实上,df.start_time <= capture_time.time()完全可以运行,但df.end_time <= capture_time.time()会返回此错误。

我不知道这里发生了什么,我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

您只需要添加()两次,首先可以省略,但也可以使用最佳做法:

pd[(pd.start_time <= capture_time.time()) & (pd.end_time <= capture_time.time())]

dtype列的end_time可能不是datetime,因此您可以使用to_datetime

pd.end_time = pandas.to_datetime(pd.end_time)

我认为DataFrame的名称更好df,然后您可以使用:

import pandas as pd

df.end_time = pd.to_datetime(df.end_time)