Pandas:选择两个日期之间的DataFrame行(Datetime Index)

18

我有一个带有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来选择整天,然后如何在特定日期内选择特定时间范围?

3个回答

20

选项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')]

8
你可以使用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)

2
使用截断需要一个排序的日期时间索引。 - ewalel

0
你可以使用 panda function between_time
the_timed_df=df["my_time_column"].between_time(date_from,date_to)

如果我没有搞错细节,那么应该能够做到您想要的。


我认为这只适用于时间,所以它必须是 between_time(time_from, time_to) - johnDanger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接