【问题标题】:IndexingError: Too many indexers while accessing multiindex dataframeIndexingError:访问多索引数据帧时索引器过多
【发布时间】:2019-08-31 14:54:42
【问题描述】:

我有一个如下的数据框。

df
Out[209]: 
a       b         
User1   2019-07-01                        [The Milky Way]
        2019-07-02                                    NaN
        2019-07-03                                [Taken]
        2019-07-04                                    NaN
        2019-07-05                          [The Lobster]
        2019-07-06                        [Bloody Sunday]
        2019-07-07                  [Lost in Translation]
        2019-07-08                                    NaN
        2019-07-09                                    NaN
        2019-07-10                             [Face Off]
        2019-07-11                  [The Thief of Bagdad]
        2019-07-12                                    NaN
        2019-07-13                              [Charade]
        2019-07-14                             [Scarface]
        2019-07-15    [Anchorman 2: The Legend Continues]

我正在尝试访问多索引,当我访问一个级别时,我得到了所需的输出。

df.loc['User1']
Out[211]: 
b
2019-07-01                        [The Milky Way]
2019-07-02                                    NaN
2019-07-03                                [Taken]
2019-07-04                                    NaN
2019-07-05                          [The Lobster]

但是当我尝试多级索引访问时,它给了我如下错误。

df.loc['User1','2019-07-13']
IndexingError: Too many indexers

索引看起来像这样:

MultiIndex(levels=[['User1', 'User2', 'User3', 'User4', 'User5', 'User6', 'User7', 'User8', 'User9', 'User10'], [2019-07-01, 2019-07-02, 2019-07-03, 2019-07-04, 2019-07-05, 2019-07-06, 2019-07-07, 2019-07-08, 2019-07-09, 2019-07-10, 2019-07-11, 2019-07-12, 2019-07-13, 2019-07-14, 2019-07-15, 2019-07-16, 2019-07-17, 2019-07-18, 2019-07-19, 2019-07-20, 2019-07-21, 2019-07-22, 2019-07-23, 2019-07-24, 2019-07-25, 2019-07-26, 2019-07-27, 2019-07-28, 2019-07-29, 2019-07-30, 2019-07-31, 2019-08-01, 2019-08-02, 2019-08-03, 2019-08-04, 2019-08-05, 2019-08-06, 2019-08-07, 2019-08-08, 2019-08-09, 2019-08-10, 2019-08-11, 2019-08-12, 2019-08-13, 2019-08-14, 2019-08-15, 2019-08-16, 2019-08-17, 2019-08-18, 2019-08-19, 2019-08-20]]

如何克服错误并访问多索引。

我已经在另一个问题中找到了建议的解决方案,但出现以下错误。

在尝试 axis = 0 参数时,我得到错误为KeyError: ('User1', '2019-07-13')

【问题讨论】:

  • @FlashThunder 想找到一种方法来访问我的数据框中的多索引
  • @FlashThunder,在尝试 axis = 0 参数时,我得到错误为 KeyError: ('User1', '2019-07-13')

标签: python pandas dataframe multi-index


【解决方案1】:

看起来像:

  • User12019-07-13MultiIndex 值(级别名为 ab,在各自的索引列上方)。
  • 名为 df 的变量实际上是一个 Series(您的打印输出没有 列名,甚至不是像 0 这样的默认名称)。

注意df.loc['User1']是访问df所有元素的情况, User1 在第一个索引级别。 您的打印输出包含第二个 MultiIndex 级别的所有现有值 和相应的值。

因此,如果您想将 loc[...] 与 MulitiIndex 一起使用,请在以下位置指定值 两个级别,然后:

  • 方括号之间应该是一个元组
  • 包含连续级别的 MultiIndex 值。

然后,假设您的 MultiIndex 的 b 列是 string 类型,尝试:

df.loc[('User1','2019-07-13')]

另一种可能性是 b 是例如DateTime 类型,然后你 必须创建一个 DateTime 类型的变量(带有正确的日期)并使用 它作为这个元组的第二个元素。

要检查 df 变量的类型,请运行 type(df)

【讨论】:

  • 运行基于元组的命令给我的错误是:KeyError:'标签 [2019-07-02] 不在 [列]'。我在 Dataframe 上运行它。
  • 请提供一个最小的、完整的和可验证的数据示例。您的问题留下了太多未知的细节。
  • 看起来 OP 没有多索引。尝试检查 df.index 并清楚地知道您是否有多索引。
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 2021-01-12
  • 2022-12-17
  • 2017-09-04
相关资源
最近更新 更多