2017-07-07 3 views
0

Ich habe eine 11-Säule Pandas Datenrahmen, dfErzeugungsspaltennamen iterativ in Pandas

Name aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk 

Ich möchte die Spalten umbenennen, damit der neue Header

Name type_1 type_2 type_3 type_4 type_5 expt_1 expt_2 expt_3 expt_4 expt_5 

I df verwenden können. Umbenennen, aber ich muss die neuen Namen manuell eingeben. Können Sie mir sagen, wie ich die Namen iterativ zu type_ * oder expt_ * ändern kann, wobei * = die Hälfte der Spalten ohne die erste (Name) ist. Ich frage das, weil ich dieses Benennungssystem zu einer großen Tabelle mit 1000 Spalten verallgemeinern möchte.

Antwort

2

Edit: dies auf eine beliebige Anzahl von Spalten besser geeignet sein wird (entweder gerade oder ungerade in der Zahl)

# get length of df's columns 
num_cols = len(list(df)) 

# generate range of ints for suffixes 
# with length exactly half that of num_cols; 
# if num_cols is even, truncate concatenated list later 
# to get to original list length 
rng = range(1, (num_cols/2) + 1) 

new_cols = ['Name'] + ['type_' + str(i) for i in rng] + ['expt_' + str(i) for i in rng] 

# ensure the length of the new columns list is equal to the length of df's columns 
df.columns = new_cols[:num_cols] 
+1

rng = range (1, int ((len (list (df)) - 1)/2) +1)) # Vorschlag hinzugefügt, um die Länge zu erhalten –

+0

@AntonvBR Ja, das ist definitiv generalisierter, obwohl das Ergebnis der inneren Berechnung bereits vom Typ int sein wird. Die Antwort jetzt bearbeiten. – cmaher

Verwandte Themen