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

Posted

技术标签:

【中文标题】Pandas 中的日期时间比较与 datetime.time() 混淆【英文标题】:Datetime comparison within Pandas messing with datetime.time() 【发布时间】:2017-01-07 14:30:14 【问题描述】:

我有一个大型 Excel 文件,其中包含马拉松运动员的开始和结束时间。为了确定延迟开始时间后仍然在赛道上的跑步者数量,我尝试将数据导入 Pandas 并使用内置的 pandas 比较来返回在特定时间跑步的跑步者列表。在给定时间 x,赛道上的跑步者将有一个开始时间 x。然而,在 Pandas 中,其中一个给了我一个错误。

我使用 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 &lt;= capture_time.time() 完全没问题并且可以运行,但是df.end_time &lt;= capture_time.time() 返回这个错误。

我不知道这里发生了什么,如果有任何帮助,我们将不胜感激。

【问题讨论】:

【参考方案1】:

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

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)

我认为DataFrame 的名称更好df,那么你可以使用:

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 &gt; capture_time.time()] 时,我也得到相同的原始错误所以我不认为这是一个分组问题。 你能添加一些数据样本吗? 3 -4 行? 也许你可以使用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)],) 并根据需要进行更改。 已修复。感谢您帮助我度过难关!

以上是关于Pandas 中的日期时间比较与 datetime.time() 混淆的主要内容,如果未能解决你的问题,请参考以下文章

pandas 中 datetime 和 datetime64[ns] 的比较

Python/Pandas/Datetime:将列中的整个列表转换为日期时间

将 DateTime 与存储在数据库中的日期进行比较

pandas使用to_datetime函数将dataframe中的时间戳数据列(UNIX timestamp)转化为日期格式(datetime)数据列

如何将两列中的日期和时间放入pandas to_datetime并设置为索引[重复]

使用 pandas.to_datetime 转换时指定日期格式