为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

凤凰求蛊 2023-09-19 14:57:14
我正在尝试在数据帧上使用 .loc 检索特定值。这曾经有效,但我已经升级到最新版本的 Pandas,它不再有效。请参阅下面的示例数据和代码,有人知道这里发生了什么吗?样本数据            Open        High        Low         Close       VolumeDate                    2020-09-24  2906.500000 2962.000000 2871.000000 2960.469971 61179002020-09-25  3033.840088 3133.989990 3000.199951 3128.989990 6948800代码import pandas as pdfrom datetime import date, timedeltaimport datetimeyesterday = date.today() - timedelta(3)symbol_data.loc[yesterday]['Close']过去,它会检索值“3128.989990”,这是 2020 年 9 月 25 日的收盘价。现在我得到“KeyError: datetime.date(2020, 9, 25)”。当我查看索引时,它显示 DatetimeIndex(['2020-09-24', '2020-09-25'], 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
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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

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

输出:

3128.98999


查看完整回答
反对 回复 2023-09-19
?
翻阅古今

TA贡献1780条经验 获得超5个赞

与特伦顿的建议类似,但链接在一起normalize以获得确切的日期。另外,尽可能避免索引链接


yesterday = pd.Timestamp.now().normalize() - pd.Timedelta(days=3)

df.loc[yesterday, 'Close']

# out

# 3128.98999


查看完整回答
反对 回复 2023-09-19
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信