df.at和df.loc获取标量值会得到不同的结果

时间:2018-05-04 11:03:10

标签: python pandas

我在http://pandas.pydata.org/pandas-docs/stable/10min.html

跟随“10分钟到熊猫”教程
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

df.loc['20130101','A']
在我的情况下

输出 -0.25092116222457655

df.at['20130101','A']

会同时导致 TypeError KeyError

pd.__version__

'0.20.3'

2 个答案:

答案 0 :(得分:2)

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

pd.DataFrame.loc包含用于datetime转换字符串的其他逻辑。

例如,这将起作用:

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

请注意,这是.at& .iat的效果优于.loc& .iloc用于访问标量:输入有更多限制。

答案 1 :(得分:1)

.at不支持像日期时间一样强制日期时间/像.loc这样的时间戳,你需要这样做:

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

Out[76]: 0.18495502425349103

引发KeyError是因为它尝试匹配索引中不存在的字符串'20130101',索引类型为DatetimeIndex,元素dtypes为{ {1}}

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

不幸的是,文档没有详细说明两种方法之间的语义差异