pandas:使用ix索引超出范围,但我可以看到该列

时间:2016-03-17 21:07:14

标签: python pandas indexing dataframe

我不知道为什么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不应该与这些数据互换吗?

2 个答案:

答案 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。