【问题标题】:Pandas: Selecting DataFrame rows between two dates (Datetime Index)Pandas:在两个日期之间选择 DataFrame 行(日期时间索引)
【发布时间】:2017-11-16 18:15:53
【问题描述】:

我有一个带有 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:00 和2015-07-16 23:00:00 之间

我尝试了这里列出的方法:here

但是df[date_from:date_to]

输出:

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

所以它需要精确的索引。此外,我没有datecolumn。仅包含日期的索引。

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

【问题讨论】:

    标签: python pandas datetime dataframe indexing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 使用截断需要一个排序的日期时间索引
      猜你喜欢
      • 2015-06-04
      • 1970-01-01
      • 2017-02-19
      • 2019-01-12
      相关资源
      最近更新 更多