2016-09-21 115 views
0

我已经找到2种方法来重命名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)}) 

但它不工作。

回答

1

您可以使用list comprehension采用铸造intstr

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

,因为你可以使用分配:

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

另一个simplier解决方案 - concanecate s_添加了1index,浇铸str

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 
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