【问题标题】:pandas: index out of bounds using ix, but I can see the column熊猫:使用 ix 索引超出范围,但我可以看到该列
【发布时间】:2016-03-17 21:07:13
【问题描述】:

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

【问题讨论】:

  • print df.columns 是什么?
  • 索引([2009, u'2010', u'2011', 2012, 2013, 2014], dtype='object')

标签: python pandas indexing dataframe


【解决方案1】:

我猜您的 df.columns.dtype 属于 object 数据类型,并且测试 df.columns.is_integer() 会返回 false。

ix 的行为取决于索引的数据类型或内容。如果你有一个 integer 类型的索引或.is_integer() 为真,ix 使用基于标签的索引(如loc)。如果您有其他类型的索引(例如 floatobject),那么ix 在给定整数时使用基于位置的索引(例如iloc)。在后一种情况下,索引位置 2014 超出范围。

如果您将列转换为整数类型,ix 将按照您的预期工作(它只会使用基于标签的索引):

>>> df.columns = df.columns.astype(int)
>>> df.ix[:, 2014]
Region 10    10.8
Georgia       7.1
Name: 2014, dtype: float64

【讨论】:

  • 这比文档中的描述要清楚得多,谢谢。
【解决方案2】:

这是因为您的所有列都是整数。根据docs

.ix 支持混合整数和基于标签的访问。它主要是基于标签的,但将回退到整数位置访问,除非 对应的轴是整数类型。 .ix 是最通用的 将支持 .loc 和 .iloc 中的任何输入。 .ix 还支持 浮点标签方案。 .ix 在交易时特别有用 具有混合的基于位置和标签的分层索引。

但是,当轴基于整数时,仅支持基于标签的访问,不支持位置访问。因此,在这种情况下,它是 通常最好是明确的并使用 .iloc 或 .loc。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多