Pandas 重新索引数据框问题

4

假设我有以下数据框:

         A       B
0  1986-87  232131
1  1987-88  564564
2  1988-89  123125
               ...

等等。

我正在尝试使用<myFrame>.set_index('A')重新索引,以便获得

                B
  1986-87  232131
  1987-88  564564
  1988-89  123125

但我一直得到了这个结果:
               B
       A       
 1986-87  232131
 1987-88  564564
 1988-89  123125

这真是让人烦恼,因为我尝试了其他的重建索引方法。我不确定A实际上代表什么,因为它在<myFrame>.columns<myFrame>.index中并未出现,而执行<myFrame>['B'][0]会给我返回232131,那么在这个重新索引的数据框中,A是什么,如何正确地进行索引或者如何消除这个奇怪的A呢?

3个回答

13

您需要重置索引的名称/名称属性:

df.index.names = [None]

例子:

In [11]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B']).set_index('A')

In [12]: df
Out[12]: 
   B
A   
1  2
3  4

In [13]: df.index.names = [None]

In [14]: df
Out[14]: 
   B
1  2
3  4

这些名称描述了索引,并赋予索引一定的含义,还可以区分索引中的不同层级(在MultiIndex中)。

@DSM 指出,若你想要将其reset_index,那么请自行考虑风险,因为此举会导致信息丢失:

In [15]: df.reset_index() # col_fill=['A', 'B'])
Out[15]: 
   index  B
0      1  2
1      3  4

不过,您可以手动填写名称:

In [16]: df.reset_index(col_fill=['A'])
Out[16]: 
   A  B
0  1  2
1  3  4

是的!这个方法奏效了!但你能详细解释一下为什么我需要重置名称属性吗?A 充当了什么角色?编辑:非常感谢。 - user1971598
1
@EdgarAroutiounian 对于MultiIndex来说,使用名称确实更有意义,我也发现它们对于单层索引也很有用(尽管我同意table有点丑)。 - Andy Hayden
4
信息必须被保存在某个地方,否则 .set_index("A").reset_index() 就无法让你回到起点。 - DSM

10
我认为你的主要问题是需要实际保存set_index的结果,或者使用inplace=True,才能设置索引:
# Either
df.set_index('A', inplace=True)
# Or:
# df = df.set_index('A')

你看到的输出是正确的,它是由 A 索引的数据框,但你只是没有将其存储在一个变量中。一旦你存储了它,事情应该会像你期望的那样工作:

df.index
Out[6]: Index([u'1986-87', u'1987-88', u'1988-89'], dtype=object)

df.loc[u'1987-88']
Out[8]: 
B    564564
Name: 1987-88, dtype: int64

怎么没起作用?它应该适用于你所需的所有索引操作,只是索引有一个名称,并相应地打印出来。 - Marius
我之前尝试的方法并没有成功,因为我还是得到了第三个数据框的示例。Andy的答案给了我想要的输出结果。 - user1971598
谢谢!我真是太糊涂了 :) - alexsalo

-2

我有一个数据框,它是从将多个数据框附加到一起生成的长列表。如图所示,默认索引是0〜7之间的循环,因为每个原始数据框都具有此索引。总行数为240。那么如何将新的数据框重新索引为0〜239,而不是30 x 0〜7。

我尝试过df.reset_index(drop=True),但似乎没有起作用。我还尝试过:df.reindex(np.arange(240)),但它返回了错误。

ValueError: cannot reindex from a duplicate axis

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接