考虑以下:
d = {'a': 0.0, 'b': 1.0, 'c': 2.0}
e = pd.Series(d, index = ['a', 'b', 'c'])
df = pd.DataFrame({ 'A' : 1.,'B' : e,'C' :pd.Timestamp('20130102')}).
当我尝试通过以下方式访问 B 列的第一行时:
>>> df.B[0]
0.0
我得到正确的结果。
但是,在阅读 KeyError: 0 when accessing value in pandas series 之后,我假设,因为我已将索引指定为“a”、“b”和“c”,所以正确的方法是访问列的第一行B(使用位置参数)是: df.B.iloc[0]
和 df.B[0]
应该引发关键错误。我不知道我错过了什么。有人可以澄清在哪种情况下我会收到 Key Error 吗?
原文由 Yash 发布,翻译遵循 CC BY-SA 4.0 许可协议
您引用的问题中的问题是给定数据帧的索引是整数,但不是从 0 开始。
Pandas 在请求
df.B[0]
时的行为是不明确的,取决于索引的数据类型和传递给 python slice 语法的值的数据类型。它的行为可能类似于df.B.loc[0]
(基于索引标签)或df.B.iloc[0]
(基于位置)或其他我不知道的东西。对于可预测的行为,我建议使用loc
和iloc
。用你的例子来说明这一点:
以参考文章中的示例为例: