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