首页 > 解决方案 > 如何根据当前时间和 10 小时前之间的日期时间列过滤熊猫数据框?

问题描述

我有一个包含 datetime 列的 pandas DataFrame,我想过滤当前小时和 10 小时前之间的数据框。我尝试了不同的方法来做到这一点,但我仍然无法处理它。因为当我想使用 pandas 时,列类型是 Series,我无法使用 timedelta 来比较它们。如果我使用 for 循环将列作为字符串与我的时间间隔进行比较,则效率不高。

表格是这样的:

在此处输入图像描述

我想过滤当前时间和 10 小时前之间的“日期时间”列,然后根据“周”> 80 进行过滤。

我也尝试过这些代码,但它们没有奏效:

filter_criteria = main_table['dateTime'].sub(today).abs().apply(lambda x: x.hours <= 10)
main_table.loc[filter_criteria]

这将返回一个错误:

TypeError: 不支持的操作数类型 -: 'str' 和 'datetime.datetime'

同样,这段代码也有同样的问题:

main_table.loc[main_table['dateTime'] >= (datetime.datetime.today() - pd.DateOffset(hours=10))]

和:

main_table[(pd.to_datetime('today') - main_table['dateTime'] ).dt.hours.le(10)]

在上面的所有代码中 main_table 是我的数据框的名称。
我怎样才能过滤它们?

标签: pandasdatetimefiltertimecompare

解决方案


首先,您需要确保 datetime 列中的数据类型正确。您可以使用以下方法进行检查:

main_table.info()

如果它不是日期时间(即对象)转换它:

# use proper formatting if this line does not work
main_table['dateTime'] = pd.to_datetime(main_table['dateTime']) 

然后你需要找到当前时间前十小时的日期时间对象(ref):

from datetime import datetime, timedelta
date_time_ten_before = datetime.now() - timedelta(hours = 10)

剩下的就是过滤列:

main_table_10 = main_table[main_table['dateTime'] >= date_time_ten_before]

推荐阅读