如何更改系列的索引?系列没有 set_index 方法

问题描述

与数据帧不同,系列没有 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)