我正在尝试使用.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',freq = None )
如果我传递字符串值,它将起作用。但是我需要使用变量来计算日期。
symbol_data.loc['2020-09-25']['Close'] ##this works, but I don't want to use a hard coded date
答案 0 :(得分:1)
类似于Trenton的建议,但与normalize
链接以获取确切的日期。另外,请尽量避免索引链接
yesterday = pd.Timestamp.now().normalize() - pd.Timedelta(days=3)
df.loc[yesterday, 'Close']
# out
# 3128.98999
答案 1 :(得分:1)
最近的熊猫版本不允许python dattetime对象切片.loc
和.at
。我被它击中,所以我知道。您需要将其转换为pandas Timestamp
或使用已发现的字符串。要将其包装到熊猫Timestamp
,只需将变量传递到pd.Timestamp
In [44]: print(df.loc[pd.Timestamp(date.today() - timedelta(3)), 'Close'])
输出:
3128.98999