说我有以下数据框,
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
。
答案 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)