![](/img/trans.png)
[英]How to filter a pandas DatetimeIndex by day of week and hour in the day
[英]Extracting time interval by minute and hour in a particular day using datetimeindex of pandas
假设我们有一个 dataframe 包括时间索引,我们只想提取一个 dataframe 包括 10:23 到 14:34。 我们应该怎么做?
n =1000
i = pd.date_range('2018-04-09', periods=n, freq='1min')
ts = pd.DataFrame({'A': [i for i in range(n)]}, index=i)
print(ts)
A
2018-04-09 00:00:00 0
2018-04-09 00:01:00 1
2018-04-09 00:02:00 2
2018-04-09 00:03:00 3
2018-04-09 00:04:00 4
... ...
2018-04-09 16:35:00 995
2018-04-09 16:36:00 996
2018-04-09 16:37:00 997
2018-04-09 16:38:00 998
2018-04-09 16:39:00 999
我的尝试:
我认为对于这样的每个问题,我们需要将其分解为 3 个条件。 如果我错了,请纠正我。
mask1 = ( 10 == ts.index.hour & 23 <= ts.index.minute)
mask2 = ( 10 <= ts.index.hour )
mask3 = ( 14 == ts.index.hour & 34 >= ts.index.minute)
mask = mask1 | mask2 | mask3
ts_desire = ts[mask]
然后我得到TypeError: Input must be Index or array-like
。
缺少( )
。 注意运算符优先级: &
优先于==
。
# HERE ----v---v
mask1 = (10 == day.index.hour) & (23 <= day.index.minute)
mask2 = (10 <= day.index.hour)
mask3 = (14 == day.index.hour) & (34 >= day.index.minute)
# HERE ----^---^
mask = mask1 | mask2 | mask3
ts_desire = day[mask]
Output:
>>> ts_desire
A
2018-04-09 10:00:00 600
2018-04-09 10:01:00 601
2018-04-09 10:02:00 602
2018-04-09 10:03:00 603
2018-04-09 10:04:00 604
... ...
2018-04-09 16:35:00 995
2018-04-09 16:36:00 996
2018-04-09 16:37:00 997
2018-04-09 16:38:00 998
2018-04-09 16:39:00 999
[400 rows x 1 columns]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.