按日期获取价值

时间:2016-02-08 05:21:23

标签: datetime pandas indexing dataframe

我有一个数据框df

            PRICE
2004-03-19  36.250000
2004-03-20  36.237500
2004-03-21  36.225000
2004-03-22  36.212500
etc...

索引的类型为:

DatetimeIndex(['2004-03-19', '2004-03-20', '2004-03-21', ...],       
               dtype='datetime64[ns]', length=1691, freq='D')

我想使用PRICE在某一天检索df[datetime.date(2004,3,19)]。这就是大熊猫的作用:

  

KeyError:datetime.date(2004,3,19)

以下作品,但这不可能是它的工作方式:

df[df.index.isin(pd.DatetimeIndex([datetime.date(2004,3,19)]))].PRICE.values[0]

2 个答案:

答案 0 :(得分:2)

这里的问题是正在进行完全匹配的比较,因为没有时间是00:00:00然后没有匹配发生。

您可以loc使用DatetimeIndex

print df.loc[pd.DatetimeIndex(['2004-3-19'])]
            PRICE
2004-03-19  36.25

或者您可以使用loc,转换字符串2004-3-19 to_datetime并获取dateDatetimeIndex

print df.loc[pd.to_datetime('2004-3-19').date()]
PRICE    36.25
Name: 2004-03-19 00:00:00, dtype: float64

如果您需要PRICE的价值:

print df.loc[pd.DatetimeIndex(['2004-3-19']), 'PRICE']
2004-03-19    36.25
Name: PRICE, dtype: float64

print df.loc[pd.DatetimeIndex(['2004-3-19']), 'PRICE'].values[0]
36.25

print df.loc[pd.to_datetime('2004-3-19').date(), 'PRICE']
36.25

但如果将time添加到datetime,则DatetimeIndex匹配:

print df.loc[pd.to_datetime('2004-3-19 00:00:00')]
PRICE    36.25
Name: 2004-03-19 00:00:00, dtype: float64

print df.loc[pd.to_datetime('2004-3-19 00:00:00'), 'PRICE']
36.25

答案 1 :(得分:1)

您的索引似乎是时间戳,而您尝试将它们等同于datetime.date对象。

我不会尝试通过df[datetime.date(2004,3,19)]检索价格,而只是推荐df['2004-3-19']

如果您打算使用datetime.date值,则应首先转换索引。

df.index = [d.date() for d in df.index]