如何在pandas中自动重命名索引?

时间:2016-09-21 18:46:54

标签: python-3.x pandas

我找到了两种方法来重命名Pandas数据帧中的索引。但是当数据帧非常大时,两者都不实用。

如何自动重命名?

方法1:

df=df.rename(index={0: 's1', 1: 's2', 2: 's3', 3: 's4', 4: 's5'})

方法2:

df['new_index']=['s1', 's2', 's3', 's4', 's5']
df=df.set_index('new_index')

我试过这个:

df=df.rename(index={'s_' + ind for ind in range(1, len(df.index)+1)})

但它不起作用。

2 个答案:

答案 0 :(得分:1)

您可以将list comprehension与演员int一起用于str

df.index = ['s_' + str(ind) for ind in range(1, len(df.index)+1)]

因为您可以使用assign:

df.index=['s1', 's2', 's3', 's4', 's5'] 
print (df)
    A
s1  1
s2  2
s3  3
s4  4
s5  5

另一个更简单的解决方案 - 将s_添加到1indexstr加入df.index = 's_' + (df.index + 1).astype(str) print (df) A s_1 1 s_2 2 s_3 3 s_4 4 s_5 5

df = pd.DataFrame({'A':range(5)})
print (df)
   A
0  0
1  1
2  2
3  3
4  4

df.index = ['s_' + str(ind) for ind in range(1, len(df.index)+1)]
print (df)
     A
s_1  0
s_2  1
s_3  2
s_4  3
s_5  4

样品:

mw_alerts

答案 1 :(得分:1)

您可以传递lambda函数:

df = pd.DataFrame(np.random.randn(5, 2))

df
Out: 
          0         1
0 -0.473776  0.211539
1 -2.763357  1.555551
2  0.157333  0.116125
3 -1.069105  0.319615
4 -0.560871  0.572320

df.rename(index=lambda x: "s{}".format(x+1))
Out: 
           0         1
s1 -0.473776  0.211539
s2 -2.763357  1.555551
s3  0.157333  0.116125
s4 -1.069105  0.319615
s5 -0.560871  0.572320