我不知道为什么pandas会在这个数据帧上抛出一个超出范围的索引:
SC7a 2009 2010 2011 2012 2013 2014
Region 10 10.1 10.6 11.1 11.6 9.7 10.8
Georgia 7.5 7.4 7.8 7.6 7.2 7.1
我正在做的就是打电话:
df.ix[:, 2014]
我收到了这个错误:
IndexError: index 2014 is out of bounds for axis 0 with size 6
请注意,调用loc工作正常:
df.loc[:, 2014]
SC7a
Region 10 10.8
Georgia 7.1
Name: 2014, dtype: float64
这是一个错误吗? df.loc和df.ix不应该与这些数据互换吗?
答案 0 :(得分:4)
我猜你的df.columns.dtype
属于对象数据类型,而且测试df.columns.is_integer()
也返回false。
ix
的行为取决于数据类型或索引的内容。如果您有整数类型索引或.is_integer()
为真,则ix
使用基于标签的索引(如loc
)。如果您有其他类型的索引(例如 float , object ),那么ix
在给定要查找的整数时使用基于位置的索引(如{{1} }})。在后一种情况下,指数位置2014已超出界限。
如果将列转换为整数类型,iloc
将按预期工作(它将仅使用基于标签的索引):
ix
答案 1 :(得分:1)
这是因为你的所有列都是整数。根据{{3}}:
.ix支持基于混合整数和标签的访问。它主要基于标签,但将回退到整数位置访问,除非 相应的轴是整数类型。 .ix是最通用的 将支持.loc和.iloc中的任何输入。 .ix也支持 浮点标签计划。 .ix在交易时特别有用 使用基于位置和标签的混合分层索引。
但是,当轴基于整数时,仅支持基于标签的访问而非位置访问。因此,在这种情况下,它是 通常最好明确并使用.iloc或.loc。