python - 如何根据时间范围删除数组中的所有行?
问题描述
这是我的输出。我想在市场关闭时删除所有行,无论日期如何。因此,每天从 21:00:00 到 14:30:00 (GMT) 删除所有行。
Open High Low Close Volume
Datetime
2020-02-24 14:30:00 48.174999 48.200001 47.500000 47.770000 7004859.0
2020-02-24 14:31:00 47.830101 48.490002 47.689999 48.380402 1237115.0
2020-02-24 14:32:00 48.360100 48.630001 48.119999 48.610001 792655.0
2020-02-24 14:33:00 48.610001 48.660000 48.395000 48.619999 675367.0
2020-02-24 14:34:00 48.570000 48.570000 48.570000 48.570000 725846.0
... ... ... ... ... ...
2020-02-28 16:37:00 45.044998 45.389999 45.044998 45.369999 442847.0
2020-02-28 16:38:00 45.349998 45.410000 45.290001 45.400002 361566.0
2020-02-28 16:39:00 45.409302 45.540001 45.380001 45.500000 393467.0
2020-02-28 16:40:00 45.500000 45.509998 45.360001 45.420300 414059.0
2020-02-28 16:41:35 45.660000 45.660000 45.660000 45.660000 0.0
[1685 rows x 5 columns]
解决方案
一种方法:
start_time=pd.to_datetime("21:00:00").time()
stop_time=pd.to_datetime("14:30:00").time()
df = df[~(df['Datetime'].dt.time >= start_time) & ~(df['Datetime'].dt.time < stop_time)]
笔记:
- 首先,我为您的时间间隔设置了两个变量:
start_time
和stop_time
. 这些将用于过滤您的数据框。 - 注意
()
后面pd.to_datetime("21:00:00").time()
。这对于比较最后一行中兼容类型的值很重要。如果您对数据类型进行一些尝试,您会更好地理解。 - 还要注意
~
(按位非),&
并( )
在最后一行;这些表示 过滤条件的逻辑运算符优先级。所以最后一行翻译为“包括不大于或等于 x 且不小于 y 的所有内容”。有不同的方法可以进行相同的过滤,但我坚持问题中提出的条件。
推荐阅读
- python - django-rest-auth "此电子邮件地址的用户配置文件已存在。" 在登录
- html - CSS边框底部和悬停背景
- react-native - 将 OneSignal 更新到最新版本后,RNOneSignal.configure 不再是一个函数
- python - 使用多处理为多个文件指定唯一名称
- javascript - 脚本只执行一次
- typescript - 无法使用 Lighthouse Typescript 定义
- python - 无法使用 screener.in 的 urllib 获取 sessionid
- java - 向 Cloudant 发送 HTTP PUT 请求
- selenium - 使用 Selenium Web 驱动程序进行 SPNEGO 身份验证
- python - 如何将字符串分成具有一些规则的组?