2016-09-21 4 views
0

Ich habe 2 Methoden gefunden, um den Index in Pandas Datenrahmen umzubenennen. Aber beide sind nicht praktisch, wenn der Datenrahmen sehr groß ist.Wie man das Umbenennen des Index in Pandas automatisiert?

Wie kann ich die Umbenennung automatisieren?

Methode 1:

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

Methode 2:

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

ich das versucht:

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

Aber es funktioniert nicht.

Antwort

1

können Sie verwenden list comprehension mit den Darstellern int zu str:

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

weil Sie assign verwenden können:

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

Eine weitere simplier Lösung - concanecate s_ mit zusätzlichen 1-index und gegossen zu 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 

Probe:

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

können Sie eine Lambda-Funktion übergeben:

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