我有一个大型的excel文件,为马拉松运动员提供启动和完成时间。为了确定延迟开始时间后仍在跑道上的跑步者的数量,我尝试将数据导入Pandas,并使用内置的熊猫比较,以返回在特定时间跑步的运动员的列表。在给定的时间x,跑道上的跑步者将有一个开始时间<= x和一个结束时间>x。然而,在Pandas中,其中一个给了我一个错误。
我使用read_exel从Excel中导入了数据,它自动将开始时间和结束时间转换为Datetime.time对象。以下是一些样本数据
df = pd.DataFrame(
{'name':['Bob','Sue','Joe'],
'start_time':[datetime.time(6,50,0),datetime.time(6,55,0),datetime.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()返回这个错误。
我不知道这里发生了什么,如果能提供任何帮助,我将不胜感激。
发布于 2016-08-31 06:25:48
您只需要添加两次(),首先可以省略,但是也使用了最佳实践:
pd[(pd.start_time <= capture_time.time()) & (pd.end_time <= capture_time.time())]或者dtype of 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)https://stackoverflow.com/questions/39242158
复制相似问题