Pandas:在两个日期之间选择DataFrame行(日期时间索引)

时间:2017-06-14 14:19:02

标签: python pandas datetime dataframe indexing

我有一个带有DatetimeIndex和一列MSE Loss的Pandas DataFrame 索引的格式如下:

DatetimeIndex(['2015-07-16 07:14:41', '2015-07-16 07:14:48',
           '2015-07-16 07:14:54', '2015-07-16 07:15:01',
           '2015-07-16 07:15:07', '2015-07-16 07:15:14',...]

它包括几天。

我想在不明确知道实际时间间隔的情况下选择特定日期的所有行(所有时间)。 例如:在2015-07-16 07:00:002015-07-16 23:00:00之间

我尝试了此处概述的方法:here

但是df[date_from:date_to]

输出:

KeyError: Timestamp('2015-07-16 07:00:00')

所以它想要精确的指数。此外,我没有date列。只有带日期的索引。

通过提供日期2015-07-16来选择一整天的最佳方法是什么?然后我如何在特定日期内选择特定的时间范围?

2 个答案:

答案 0 :(得分:7)

选项1

示例df:

df
                      a
2015-07-16 07:14:41  12
2015-07-16 07:14:48  34
2015-07-16 07:14:54  65
2015-07-16 07:15:01  34
2015-07-16 07:15:07  23
2015-07-16 07:15:14   1

看起来你在没有.loc的情况下尝试这个(没有它就行不通):

df.loc['2015-07-16 07:00:00':'2015-07-16 23:00:00']
                      a
2015-07-16 07:14:41  12
2015-07-16 07:14:48  34
2015-07-16 07:14:54  65
2015-07-16 07:15:01  34
2015-07-16 07:15:07  23
2015-07-16 07:15:14   1

选项2

您可以对索引使用布尔索引:

df[(df.index.get_level_values(0) >= '2015-07-16 07:00:00') & (df.index.get_level_values(0) <= '2015-07-16 23:00:00')]

答案 1 :(得分:4)

您可以使用truncate

begin = pd.Timestamp('2015-07-16 07:00:00')
end = pd.Timestamp('2015-07-16 23:00:00')

df.truncate(before=begin, after=end)