首页 > 解决方案 > 如何根据时间范围删除数组中的所有行?

问题描述

这是我的输出。我想在市场关闭时删除所有行,无论日期如何。因此,每天从 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]

标签: pythonarraysdatatablestime-series

解决方案


一种方法:

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_timestop_time. 这些将用于过滤您的数据框。
  • 注意()后面pd.to_datetime("21:00:00").time()。这对于比较最后一行中兼容类型的值很重要。如果您对数据类型进行一些尝试,您会更好地理解。
  • 还要注意~(按位非),&( )在最后一行;这些表示 过滤条件的逻辑运算符优先级。所以最后一行翻译为“包括不大于或等于 x 且不小于 y 的所有内容”。有不同的方法可以进行相同的过滤,但我坚持问题中提出的条件。

推荐阅读