Datetime 按日期获取值

Datetime 按日期获取值,datetime,pandas,indexing,dataframe,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=16

我有一个数据帧
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')
我想使用
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]

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

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

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

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

这里的问题是,正在为精确匹配执行比较,因为没有一个时间是
00:00:00
,因此不会发生匹配

您可以使用:

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

如果您需要
价格的值

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
但如果将
时间
添加到
日期时间
,则匹配:


“我疯了吗?”。我认为这是为了。更实际地说:我在您的示例数据中没有看到2004-03-18的日期(但省略号隐藏了数据)。这也正是Pandas告诉您的。示例与代码不同。我正在尝试检索某个现有日期的值。
print df.loc[pd.to_datetime('2004-3-19').date()]
PRICE    36.25
Name: 2004-03-19 00:00:00, dtype: float64
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
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