python - 过滤出预设日期和时间的数据框
问题描述
我的 Excel 文件包含以下列
我需要按当前日期和时间过滤掉该行。意味着,它应该显示 Today 介于“From Date”和“To Date”之间的那些行
和
当前时间介于“从时间”和“到时间”之间
这是我的代码:
import pandas as pd
from datetime import datetime
today = (datetime.date(datetime.now())) ##For Date
print (today)
now = datetime.now()
now = now.strftime("%H:%M:%S")
print(now)
df = pd.read_excel (r'ymca.xlsx')
df = df[(df['From Date']<= str(today)) & (df['To Date']>= str(today))]
print (df)
df = df[(df['From Time']<= str(now)) & (df['To Time']>= str(now))]
print (df)
第一个过滤器工作正常,它能够过滤日期
2020-09-01
22:04:37
From Date To Date From Time To Time
1 2020-08-31 2020-09-01 00:00:00 13:00:00
2 2020-09-01 2020-09-02 12:00:00 13:00:00
5 2020-08-31 2020-09-05 12:00:00 13:00:00
但是第二个时间过滤器不起作用。它出错了,因为两者的语法相同。
请帮忙。
File ".\tts2.py", line 17, in <module>
df = df[(df['From Time']<= str(now)) & (df['To Time']>= str(now))]
File "C:\Python38\lib\site-packages\pandas\core\ops\common.py", line 64, in new_method
return method(self, other)
File "C:\Python38\lib\site-packages\pandas\core\ops\__init__.py", line 529, in wrapper
res_values = comparison_op(lvalues, rvalues, op)
File "C:\Python38\lib\site-packages\pandas\core\ops\array_ops.py", line 247, in comparison_op
res_values = comp_method_OBJECT_ARRAY(op, lvalues, rvalues)
File "C:\Python38\lib\site-packages\pandas\core\ops\array_ops.py", line 57, in comp_method_OBJECT_ARRAY
result = libops.scalar_compare(x.ravel(), y, op)
File "pandas\_libs\ops.pyx", line 96, in pandas._libs.ops.scalar_compare
TypeError: '<=' not supported between instances of 'datetime.time' and 'str'
解决方案
只需将单独的日期和时间列转换为from
包含to
日期时间的列,然后过滤这些列:
df['from'] = pd.to_datetime(df['From Date'].astype(str) + ' ' + df['From Time'])
df['to'] = pd.to_datetime(df['To Date'].astype(str) + ' ' + df['To Time'])
now = pd.to_datetime('now')
df.loc[(now >= df.pop('from')) & (now <= df.pop('to'))]
输出:
From Date To Date From Time To Time
1 2020-09-01 2020-09-02 12:00:00 13:00:00
2 2020-08-31 2020-09-05 12:00:00 13:00:00
PS现在,要解释您遇到的错误,这是因为您的时间列似乎是datetime.time
类型,不支持与字符串进行比较。
推荐阅读
- r - 重新排序因子水平以在分面包裹的条形图中正确显示
- hyperledger-fabric - 商业视角下的超级账本
- javascript - 无效日期 - JavaScript GMT 时间
- c - 关于一个小内存分配程序的问题(41行)
- ssl - Grails4 中的 Jsoup 和 OpenJDK
- r - 如何使用 R 计算 q 值?
- iis - IIS 目录仅浏览单个目录
- python - 在 python 中优化 datetime.date 到 unix 时间戳转换
- javascript - 捕获 JavaScript console.log console.dir、console.table
- javascript - 如何使用良好实践在 javascript 中声明矩阵?