我有一个数据框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]
答案 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
并获取date
的DatetimeIndex
:
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]