在DatetimeIndex上使用.loc检索特定日期的值(KeyError



我正试图在数据帧上使用.loc检索特定值。这以前是有效的,但我已经升级到最新版本的Pandas,现在已经不起作用了。请参阅下面的示例数据和代码,有人知道这里发生了什么吗?

样本数据

Open        High        Low         Close       Volume
Date                    
2020-09-24  2906.500000 2962.000000 2871.000000 2960.469971 6117900
2020-09-25  3033.840088 3133.989990 3000.199951 3128.989990 6948800

代码

import pandas as pd
from datetime import date, timedelta
import datetime
yesterday = date.today() - timedelta(3)
symbol_data.loc[yesterday]['Close']

在过去,它将检索值"0";3128.989990〃;,这是2020-09-25的Close值;KeyError:datetime.date(2020,9,25(";。

当我查看索引时,它显示DatetimeIndex(['2020-09-24','2020-09-15'],dtype='datetime64[ns],name='Date',freq=None(

如果我传递字符串值,它就起作用了。但我需要使用我的变量来计算日期。

symbol_data.loc['2020-09-25']['Close']  ##this works, but I don't want to use a hard coded date

最近的panda版本不允许通过python dattetime对象对.loc.at进行切片。我被它击中了,所以我知道。您需要将其转换为pandasTimestamp或使用您已经发现的字符串。要将其包装到pandasTimestamp,只需将变量传递到pd.Timestamp

In [44]: print(df.loc[pd.Timestamp(date.today() - timedelta(3)), 'Close'])

输出:

3128.98999

类似于Trenton的建议,但与normalize链接以获得确切日期。此外,尽可能避免索引链接

yesterday = pd.Timestamp.now().normalize() - pd.Timedelta(days=3)
df.loc[yesterday, 'Close']
# out
# 3128.98999

最新更新