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

新手上路,请多包涵

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

 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 选择一整天的最佳方法是什么,然后我如何选择特定日期内的特定时间范围?

原文由 user3142067 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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

原文由 Andrew L 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 JrtPec 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题