熊猫重新索引数据框架问题

时间:2013-11-18 00:14:43

标签: python pandas

说我有以下数据框,

         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,我如何从一开始就正确索引,或者在错误的reindex数据框中摆脱这个奇怪的A

3 个答案:

答案 0 :(得分:12)

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

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

但是,您可以手动col_fill名称:

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

答案 1 :(得分: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

答案 2 :(得分:-2)

我有一个数据帧,它是通过将多个数据帧附加到一个长列表中生成的。如图所示,默认索引是0到7之间的循环,因为每个原始df都有这个索引。总行数为240.那么如何将新的df重新索引为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