像常规列一样访问熊猫索引

时间:2018-09-02 17:38:58

标签: python pandas dataframe indexing series

我有一个带有命名索引的Pandas DataFrame。我想将其传递给一段代码,该代码采用一个DataFrame,一个列名和其他一些东西,并完成涉及该列的大量工作。仅在这种情况下,我要突出显示的列是索引,但是为该代码段提供索引的标签不起作用,因为您无法像常规列那样提取索引。例如,我可以像这样构造一个DataFrame:

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'

我知道有一些解决方法,例如复制列或将索引更改为其他内容。但是,是否有某种更清洁的方法,例如某种形式的列访问,可以像对待其他所有索引一样对待索引?

3 个答案:

答案 0 :(得分:2)

索引在熊猫中有特殊含义。它用于优化特定操作,并可用于各种方法,例如合并/联接数据。因此,请选择:

  • 如果它只是“另一列”,请使用reset_index并将其视为另一列。
  • 如果它确实用于索引编制,请将其保留为索引并使用df.index

我们无法为您做出选择。它应取决于基础数据的结构以及打算如何分析数据。

有关使用数据框索引的更多信息,请参见:

答案 1 :(得分:2)

如果您需要按名称访问(索引)列,也可以使用$(document).ready(function() { $('body').on('click','.like-it',function(e){ e.preventDefault(); // stops the button from doing something else $.get( 'like.php', { id : $(this).attr('id') }, function(response) { console.log(response); } ); }); }); 。它也适用于层次结构索引(df.index.get_level_values)。

MultiIndex

答案 2 :(得分:0)

代替使用reset_index,您可以将索引复制到普通列,做一些工作然后删除该列,例如:

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