Python 用于获取标量值的df.at和df.loc给出了不同的结果
我正在学习“熊猫10分钟”教程 在我的例子中,输出-0.2509211622457655 当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 引发键错误是
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']