我在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'
答案 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
,这与传递类似字符串的日期时间不同
不幸的是,文档没有详细说明两种方法之间的语义差异