使用 pandas 的 datetimeindex 在特定日期按分钟和小时提取时间间隔

Posted

技术标签:

【中文标题】使用 pandas 的 datetimeindex 在特定日期按分钟和小时提取时间间隔【英文标题】:Extracting time interval by minute and hour in a particular day using datetimeindex of pandas 【发布时间】:2022-01-10 18:34:02 【问题描述】:

假设我们有一个包含时间索引的数据帧,我们只想提取一个包含 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

【问题讨论】:

【参考方案1】:

更新

为什么从 10 开始?它应该从10:23(含)开始,到16:34(含)结束

也许你正在寻找between_time:

>>> ts.between_time('10:23', '16:34')

                       A
2018-04-09 10:23:00  623
2018-04-09 10:24:00  624
2018-04-09 10:25:00  625
2018-04-09 10:26:00  626
2018-04-09 10:27:00  627
...                  ...
2018-04-09 16:30:00  990
2018-04-09 16:31:00  991
2018-04-09 16:32:00  992
2018-04-09 16:33:00  993
2018-04-09 16:34:00  994

[372 rows x 1 columns]

缺少( )。注意操作员优先级:&amp; 优先于 ==

#                  HERE ----v---v
mask1 = (10 == ts.index.hour) & (23 <= ts.index.minute)
mask2 = (10 <= ts.index.hour)
mask3 = (14 == ts.index.hour) & (34 >= ts.index.minute)
#                  HERE ----^---^

mask = mask1 | mask2 | mask3
ts_desire = ts[mask]

输出:

>>> 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]

【讨论】:

为什么从10开始?它应该从10:23(含)开始,到16:34(含)结束。另外,day[mask] 是什么?

以上是关于使用 pandas 的 datetimeindex 在特定日期按分钟和小时提取时间间隔的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用pd.DatetimeIndex函数将混合格式的日期数据数据转化为时间索引数据DatetimeIndex通过index参数为Series数据指定时间对象索引

pandas使用pd.DatetimeIndex函数将混合格式的日期数据数据转化为时间索引数据DatetimeIndex通过index参数为Series数据指定时间对象索引

pandas使用pd.DatetimeIndex函数将混合格式的日期数据(包含字符串datetime对象pd.Timestamp)数据转化为时间索引数据DatetimeIndex

基于时间间隔使用 DatetimeIndex 对 Pandas 数据帧进行切片

Pandas - 如何将 RangeIndex 转换为 DateTimeIndex

如何在 Pandas 中使用 datetimeindex 属性选择对 df 的观察?