【问题标题】:pandas timeseries select single date熊猫时间序列选择单个日期
【发布时间】:2018-12-01 04:44:08
【问题描述】:

从时间序列中选择单个日期会产生 KeyError。

设置:

import pandas as pd
import numpy as np
ts = pd.DataFrame({'date': pd.date_range(start = '1/1/2017', periods = 5),
                   'observations': np.random.choice(range(0, 100), 5, replace = True)}).set_index('date')

数据框:

           observations
date                    
2017-01-01            58
2017-01-02            88
2017-01-03            53
2017-01-04             4
2017-01-05            26

如何选择单个日期的观察次数?

ts['2017-01-01']

返回:KeyError: '2017-01-01'

但是……

ts['2017-01-01':'2017-01-01']

...似乎工作得很好。

有什么建议可以用一个日期选择/子集吗?

【问题讨论】:

  • 你试过ts.loc['2017-01-01']吗?
  • 直接索引数据框引用它的列,而不是它的行。 @Ben.T 的解决方案提供了索引行的典型方法
  • @Ben.T 你能快速写下这个答案,以便 Rene 可以将其标记为正确以指出错误吗?
  • 谢谢,工作正常!并感谢您的明确解释。但在 pandas 中仍然感觉有点“不一致”。
  • @Rene 开头,特别是如果你来自 numpy,我理解你的感受。但是过了一会儿,我最终会更频繁地在列之间进行操作而不是在行之间进行操作,并且以这种方式查找列的名称很容易:)

标签: python-3.x pandas time-series


【解决方案1】:

正如 @scnerd 指出的那样,当您执行 ts['2017-01-01'] 时,它会尝试查找“2017-01-01”作为数据框 ts 的列名,这会给您一个 @987654324 @ 因为ts 中的所有列都没有这个名称

为了查找索引名称,如您的示例中将“日期”设置为索引,您需要使用loc 方法,例如ts.loc['2017-01-01'],您将得到:

observations    54
Name: 2017-01-01 00:00:00, dtype: int32

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2014-01-01
    • 2022-10-17
    • 2021-12-14
    • 2019-02-19
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多