pandas - 如何根据当前时间和 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 是我的数据框的名称。
我怎样才能过滤它们?
解决方案
首先,您需要确保 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]
推荐阅读
- spring - 如何模拟 RestTemplate 交换?
- r - 如何改进沿 ablines 对齐文本的方式?
- html - HTML:iframe 和段落在同一行
- android - 如何从数据库中获取数据并将其转换为原生反应的数据表
- python - 我如何制作一个每隔几秒钟点击一次的机器人
- r - 密度图未显示在 R 中
- css - WP udpate 后主题搞砸了
- java - 在 MessageReciever 之外确认 pubSub 消息
- reactjs - 类型错误:_firebase_js__WEBPACK_IMPORTED_MODULE_1__.default.auth 不是函数
- python - 在石头,纸,剪刀中实现while循环