Pandas中的日期时间比较与datetime.time()混淆

3
我有一个大型的Excel文件,其中包含马拉松选手的起跑和终点时间。为了确定在延迟的开始时间后仍在赛道上的选手数量,我尝试将数据导入Pandas,并使用内置的pandas比较来返回在某个特定时间正在奔跑的选手列表。在给定时间x,赛道上的选手必须具有开始时间<= x和结束时间> x。然而,在Pandas中,其中一个会出现错误。
我已经使用read_excel从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()]

然而我遇到了错误:

类型错误:无法比较datetime.time和unicode

实际上,df.start_time <= capture_time.time()是完全正常的并且可以运行,但是df.end_time <= capture_time.time()会返回此错误。

我不知道这里发生了什么事情,任何帮助都将不胜感激。

1个回答

2

您需要添加两次(),第一次可以省略,但最佳实践是也要使用:

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

或者 end_time 这一列的 dtype 不是 datetime,因此您可以使用 to_datetime 函数:

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

我认为使用df作为DataFrame的名称更好,这样你可以使用:

import pandas as pd

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

我将编辑我的原始帖子,使其更清晰。在匆忙中,我将我的数据框命名为pd,但实际上我正在使用df。然而,我不认为这是问题所在。当我运行type(df.end_time[0])时,返回的是datetime.time。当我运行代码df[df.end_time > capture_time.time()]时,我得到了相同的原始错误,因此我不认为这是分组问题。 - Calvin Cotton
你能添加一些数据样本吗?大约3-4行就可以了。 - jezrael
也许您可以使用 df = pd.DataFrame({'end_time':[datetime.time(10,11,10),datetime.time(11,10,23),datetime.time(12,12,4)], 'start_time':[datetime.time(10,11,7),datetime.time(11,10,20),datetime.time(12,12)],}) - jezrael
并根据需要进行更改。 - jezrael
天啊,你完全正确。有一个条目输入错误,所以Pandas没有将整个列转换为datetime.time。非常感谢你!! - Calvin Cotton
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接