【问题标题】:How can I filter a pandas data frame based on a datetime column between current time and 10 hours ago?如何根据当前时间和 10 小时前之间的日期时间列过滤熊猫数据框?
【发布时间】:2021-10-26 06:09:28
【问题描述】:

我有一个包含 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 是我的数据框的名称。
如何过滤它们?

【问题讨论】:

  • 您是否已将您的日期时间列转换为实际的日期时间对象?你可以使用to_datetime()
  • 我应该导入什么来做到这一点? ` import datetime check = datetime.to_datetime(main_table['dateTime']) print(check - - timedelta(hours=10)) `
  • 它是 pandas 方法之一。你可以在这里看到它是如何完成的:geeksforgeeks.org/…
  • 我试过这个:check = pd.to_datetime(main_table['dateTime']) 但我仍然不知道如何过滤两个小时之间的数据帧!
  • 我已经打印了检查类型以确定结果,不幸的是它仍然是熊猫系列:

标签: pandas datetime filter time compare


【解决方案1】:

首先,您需要确保 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2021-11-16
    • 2013-09-15
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多