为何直接用[-1]索引Pandas Series报KeyError,iloc[-1]却正常?
问题解答
核心原因
你遇到的KeyError: -1是因为Pandas里[]和iloc的索引逻辑完全不一样:
yearly_slice[foo][-1]中的[]属于标签索引——它会把-1当成Series的索引标签去查找,要是你的Series索引里没有-1这个值,必然会触发KeyError。yearly_slice[foo].iloc[-1]里的iloc是位置索引——它只看元素的位置,-1就代表倒数第一个位置,和索引标签是什么没关系,所以能正常取到最后一个元素。
解决方案
如果想直接用类似位置偏移的方式取首尾元素,除了iloc,还可以这么写:
- 取第一个元素:
yearly_slice[foo].iloc[0]或者yearly_slice[foo].head(1).iloc[0] - 取最后一个元素:
yearly_slice[foo].iloc[-1]或者yearly_slice[foo].tail(1).iloc[0]
另外,尽量别用链式索引(比如yearly_slice[foo][-1]这种连续用[]的写法),因为它可能返回视图而非副本,某些场景下容易出意外。改用.loc或.iloc的链式调用更稳妥,比如yearly_slice.loc[:, foo].iloc[-1]。
内容的提问来源于stack exchange,提问作者Liqs
相关产品推荐
相关产品推荐

