如何通过选择特定时间间隔内的时间来索引 pandas DataFrames?

Posted

技术标签:

【中文标题】如何通过选择特定时间间隔内的时间来索引 pandas DataFrames?【英文标题】:How to index pandas DataFrames by selecting times in a particular interval? 【发布时间】:2015-10-17 10:20:00 【问题描述】:

我有一个类似于以下布局的 DataFrame:

In [24]: example_df
Out[24]:
                      Price
DateTime
2012-09-11 19:44:00   99.622
2012-09-11 19:45:00   99.312
2012-09-11 19:46:00   99.211
2012-09-11 19:47:00   99.757
2012-09-11 19:48:00   99.312
2012-09-11 19:49:00   99.157
2012-09-11 19:50:00   99.751
...

DataFrame 有一个日期时间索引。

这个 DataFrame 每分钟跨越很多年,我将如何将数据切片以仅包含时间序列中每天的特定时间段?假设 DataFrame 中的每一天都是 12:00-13:00?

【问题讨论】:

【参考方案1】:

您可以使用indexer_between_time() 捕获位于给定时间间隔内的索引,然后使用iloc 对DataFrame 进行切片。例如:

>>> df.iloc[df.index.indexer_between_time('19:45:00', '19:49:00')]
                      Price
2012-09-11 19:45:00  99.312
2012-09-11 19:46:00  99.211
2012-09-11 19:47:00  99.757
2012-09-11 19:48:00  99.312
2012-09-11 19:49:00  99.157

对于每天 12:00 到 13:00 之间的条目的特定请求,您可以使用以下内容获取行:

df.iloc[df.index.indexer_between_time('12:00:00', '13:00:00')]

【讨论】:

这很好用,谢谢,快速提问 - df.index.indexer_between_time('12:00:00', '13:00:00') 给出了一个索引数组 - pandas iloc 如何然后解析这个列表?一次只有两个? 很高兴它有帮助 - iloc 只是遍历整数数组并从 DataFrame 中选择每个相应的行(如果我误解了你的问题,请告诉我)。

以上是关于如何通过选择特定时间间隔内的时间来索引 pandas DataFrames?的主要内容,如果未能解决你的问题,请参考以下文章

pandas索引的设置与修改

我如何通过索引号创建特定间隔列的数据框

Pandas:为啥在布尔索引后需要双括号来选择列

熊猫滚动适用于可变窗口长度

如何避免循环内的数据丢失

Pandas:更改通过列中的布尔索引选择的值而不会收到警告