(keyError):多索引切片要求索引完全列出元组..为什么这是由列表引起的,而不是由元组引起的

  • 本文关键字:元组 索引 列表 keyError 切片 pandas
  • 更新时间 :
  • 英文 :


这个问题在这里部分是为了帮助我了解多数索引的lex sorting是什么。

说我有一些多索引数据框DF,对于我要使用的索引:

a = (1, 1, 1)

因此,要从数据框架中提取值:

df.loc[a, df.columns[i]]

有效的工作。但是以下内容没有:

df.loc[list(a), df.columns[i]]

给我错误:

*** KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (1), lexsort depth (0)'

为什么这是?

另外,另一个问题,以下性能警告是什么意思?

PerformanceWarning: indexing past lexsort depth may impact performance.

我将使用 df

的示例来说明将元组和列表传递给 .loc之间的区别
              0  1  2
first second         
bar   one     4  4  7
      two     3  4  7
foo   one     8  1  8
      two     7  5  4

在这里df.loc[('foo', 'two')]返回该元组索引的行(7、5、4)。该参数指定多数索引的两个级别。

但是df.loc[['foo', 'two']]意味着您希望所有具有多数索引最高级别的行为'foo'或"两个"。列表意味着这些是您想要的选项,并且由于每个选项中只提供一个级别,因此选择基于第一个(最左)级别。结果:

              0  1  2
first second         
foo   one     8  1  8
      two     7  5  4

(由于没有以"两个"开头的多索引,只有" foo"的那些。)

没有看到您的数据框,我无法分辨出这种差异会导致keyError的何处,但我希望现在的差异本身很清楚。

相关内容

最新更新