问题描述
与数据帧不同,系列没有 set_index 方法——这就引出了一个问题:如果我们想更改索引,我们该怎么做?
访问 series.index 有效,但我似乎记得不推荐这样做?
我可以转换为数据帧,使用 set_index 方法,然后转换回系列,但看起来很复杂。
EDIT:我不想重新索引,而是要设置一个新索引。如文档中所述https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.reindex.html
默认情况下新索引中没有对应的值 数据框中的记录分配为 NaN。
那不是我需要的。我需要的是:
+---------------+-----------+
| Current index | New Index |
+---------------+-----------+
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |
+---------------+-----------+
玩具示例:
import pandas as pd
s = pd.Series(data =['a','b','c'])
#this works
s.index = [4,5,6]
# this doesn't work
s = s.set_index([4,6])
解决方法
如果你想重新索引,我建议你用新的索引列表做一个 s.index。
import pandas as pd
s = pd.Series(data =['a','b','c'],index=range(1,4))
print (s)
s = s.append(pd.Series(list('defg')))
s.index= range(11,19)
print (s)
输出如下: 初始系列:
1 a
2 b
3 c
dtype: object
追加之后:
1 a
2 b
3 c
0 d
1 e
2 f
3 g
4 h
dtype: object
如您所知,如果我们不提供索引,追加只是从 0 开始索引。
现在如果我想将索引设置为新值,我可以只做 s.index。 range(11,19) 的 s.index 的结果是:
11 a
12 b
13 c
14 d
15 e
16 f
17 g
18 h
dtype: object
,
让我们试试 .set_axis
作为替代方法,因为 .set_index
是一种数据框方法而不是系列方法
s.set_axis([4,5,6],axis=0)
如果您不想对值进行硬编码,也可以使用 np.arange
s.set_axis(np.arange(len(s))+4,axis=0)