2016-09-21 50 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