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

Posted

技术标签:

【中文标题】Pandas:在两个日期之间选择 DataFrame 行(日期时间索引)【英文标题】:Pandas: Selecting DataFrame rows between two dates (Datetime Index) 【发布时间】: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:002015-07-16 23:00:00 之间

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

但是df[date_from:date_to]

输出:

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

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

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

【问题讨论】:

【参考方案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)

【讨论】:

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

以上是关于Pandas:在两个日期之间选择 DataFrame 行(日期时间索引)的主要内容,如果未能解决你的问题,请参考以下文章

选择两个日期之间的 Pandas 数据框行

pandas一些基本操作(DataFram和Series)_1

pandas一些基本操作(DataFram和Series)_2

Pandas - 两个日期之间的月数

Pandas Dataframe 保留日期在两个日期之间的行(单独的列)

Python Pandas Dataframe 合并并只选择几列