我有一个大型的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.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()
会返回此错误。
我不知道这里发生了什么,我们将不胜感激。
答案 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)