Python 用于获取标量值的df.at和df.loc给出了不同的结果

Python 用于获取标量值的df.at和df.loc给出了不同的结果,python,pandas,Python,Pandas,我正在学习“熊猫10分钟”教程 在我的例子中,输出-0.2509211622457655 当 df.at['20130101','A'] 同时导致类型错误和关键错误 pd.__version__ “0.20.3”。at不支持将类似datetime的字符串强制转换为类似的datetime/时间戳。如果loc支持,则需要执行以下操作: In[76]: df.at[pd.Timestamp('20130101'),'A'] Out[76]: 0.18495502425349103 引发键错误是

我正在学习“熊猫10分钟”教程

在我的例子中,输出-0.2509211622457655

df.at['20130101','A']
同时导致类型错误关键错误

pd.__version__

“0.20.3”

。at
不支持将类似datetime的字符串强制转换为类似
的datetime/时间戳。如果loc
支持,则需要执行以下操作:

In[76]:
df.at[pd.Timestamp('20130101'),'A']

Out[76]: 0.18495502425349103
引发
键错误
是因为它试图匹配索引中不存在的字符串
'20130101'
,索引类型是
日期时间索引
,元素数据类型是
时间戳

此外,在本教程中还显示了传递日期[0],这与传递类似日期时间的字符串不同


文档没有详细说明这两种方法之间的语义差异。遗憾的是,

pd.DataFrame.at
要求您以正确的对象类型指定标签

pd.DataFrame.loc
包括字符串到
datetime
转换的附加逻辑

例如,这将起作用:

df.at[pd.to_datetime('20130101'),'A']
请注意,
.at
&
.iat
在访问标量时性能优于
.loc
&
.iloc
的一个原因是:输入具有更大的限制

df.at[pd.to_datetime('20130101'),'A']