如何根据当前时间和 10 小时前的日期时间列过滤 pandas 数据框?

How can I filter a pandas data frame based on a datetime column between current time and 10 hours ago?

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

table是这样的:

而我想过滤当前时间和10小时前之间的'dateTime'列,然后根据'weeks' > 80进行过滤。

我也试过这些代码,但它们没有用:

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

这returns一个错误:

TypeError: unsupported operand type(s) for -: 'str' and '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 是我的数据框的名称。
我如何过滤它们?

首先您需要确保日期时间列中的数据类型正确。您可以使用以下方式进行检查:

main_table.info()

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

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

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

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]