代码之家  ›  专栏  ›  技术社区  ›  kuzzooroo

像常规列一样访问Pandas索引

  •  2
  • kuzzooroo  · 技术社区  · 6 年前

    我有一个带有命名索引的Pandas数据框。我想把它传递给一段代码,它包含一个数据帧、一个列名和其他一些东西,并完成一系列涉及该列的工作。只有在这种情况下,我想突出显示的列才是索引,但是将索引的标签赋给这段代码是行不通的,因为不能像提取常规列那样提取索引。例如,我可以构造这样的数据帧:

    import pandas as pd, numpy as np
    
    df=pd.DataFrame({'name':map(chr, range(97, 102)), 'id':range(10000,10005), 'value':np.random.randn(5)})
    df.set_index('name', inplace=True)
    

    结果如下:

             id     value
    name                 
    a     10000  0.659710
    b     10001  1.001821
    c     10002 -0.197576
    d     10003 -0.569181
    e     10004 -0.882097
    

    现在我怎样才能进入 name 专栏?

    print(df.index)  # No problem
    print(df['name'])  # KeyError: u'name'
    

    我知道有一些解决方法,比如复制列或将索引更改为其他内容。但是,是否有更干净的方法,比如某种列访问方式,将索引与其他方法一样对待?

    2 回复  |  直到 6 年前
        1
  •  3
  •   jpp    6 年前

    索引在大熊猫身上有着特殊的意义。它用于优化特定操作,并可用于各种方法,如合并/连接数据。因此,选择:

    • 如果是“另一列”,使用 reset_index 把它当作另一列。
    • 如果它真正用于索引,请将其作为索引和使用。 df.index .

    我们不能为你做这个选择。它应该取决于基础数据的结构以及您打算如何分析数据。

    有关使用数据帧索引的详细信息,请参阅:

        2
  •  0
  •   Ian Ash    6 年前

    而不是使用 reset_index ,您可以将索引复制到普通列,执行一些操作,然后删除该列,例如:

    df['tmp'] = df.index
    # do stuff based on df['tmp']
    del df['tmp']