在 DatetimeIndex 上使用 .loc 检索特定日期的值(KeyError
Using .loc on DatetimeIndex to retrieve a value on a specific date (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']
过去它会检索值“3128.989990”,这是 2020-09-25 的收盘价。
现在我得到“KeyError: datetime.date(2020, 9, 25)”。
当我查看索引时,它显示 DatetimeIndex(['2020-09-24', '2020-09-25'], dtype='datetime64[ns]', name='Date',频率=None)
如果我传递字符串值,就可以了。但是我需要使用我的变量来计算日期。
symbol_data.loc['2020-09-25']['Close'] ##this works, but I don't want to use a hard coded date
与 Trenton 的建议类似,但与 normalize
链接以获得确切日期。另外,尽可能避免索引链接
yesterday = pd.Timestamp.now().normalize() - pd.Timedelta(days=3)
df.loc[yesterday, 'Close']
# out
# 3128.98999
最近的 pandas 版本不允许 .loc
和 .at
通过 python dattetime 对象进行切片。我被它击中了,所以我知道。您需要将其转换为 pandas Timestamp
或使用您已经发现的字符串。要将其包装为 pandas Timestamp
,只需将变量传递给 pd.Timestamp
In [44]: print(df.loc[pd.Timestamp(date.today() - timedelta(3)), 'Close'])
输出:
3128.98999
我正在尝试在数据帧上使用 .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']
过去它会检索值“3128.989990”,这是 2020-09-25 的收盘价。
现在我得到“KeyError: datetime.date(2020, 9, 25)”。
当我查看索引时,它显示 DatetimeIndex(['2020-09-24', '2020-09-25'], dtype='datetime64[ns]', name='Date',频率=None)
如果我传递字符串值,就可以了。但是我需要使用我的变量来计算日期。
symbol_data.loc['2020-09-25']['Close'] ##this works, but I don't want to use a hard coded date
与 Trenton 的建议类似,但与 normalize
链接以获得确切日期。另外,尽可能避免索引链接
yesterday = pd.Timestamp.now().normalize() - pd.Timedelta(days=3)
df.loc[yesterday, 'Close']
# out
# 3128.98999
最近的 pandas 版本不允许 .loc
和 .at
通过 python dattetime 对象进行切片。我被它击中了,所以我知道。您需要将其转换为 pandas Timestamp
或使用您已经发现的字符串。要将其包装为 pandas Timestamp
,只需将变量传递给 pd.Timestamp
In [44]: print(df.loc[pd.Timestamp(date.today() - timedelta(3)), 'Close'])
输出:
3128.98999