2017-04-19 1 views
1

Ich habe einen riesigen Datenrahmen mit 282 Spalten und 500K Zeilen. Ich möchte eine Liste von Spalten aus dem Datenrahmen mit den Spaltenindizes entfernen. Der folgende Code funktioniert für sequenzielle Spalten.Python, wie man einen Datenrahmen nur mit den Spaltenindizes untergliedert?

df1 = df.ix[:,[0:2]] 

Das Problem ist, dass meine Spaltenindizes nicht sequenziell sind.

Zum Beispiel möchte ich Spalten 0, 1, 2 und 5 aus df entfernen. Ich habe versucht, den folgenden Code:

df1 = df.ix[:,[0:2,5]] 

ich die folgende Fehlermeldung erhalten:

SyntaxError: invalid syntax 

Irgendwelche Vorschläge?

Antwort

2

Spalten auswählen andere als 0,1,2,5 mit:

df.ix[:, [3,4]+list(range(6,282))] 

Oder ein wenig mehr Dynamik:

df.ix[:, [3,4]+list(range(6,df.shape[1]))] 
+0

Arbeitete wie ein Charme. Vielen Dank! –

+0

Kühl. froh, dass es geholfen hat! – Psidom

0

Ist es ein numpy Array Sie haben? Versuchen

df1 = df.ix[:, (0,1,2,5)] 

oder

df1 = df.ix[:, [0,1,2,5]] 

oder

data[:, [i for i in range(3)]+[5]] 
1

Verwenden np.r_[...] für Scheiben entlang der ersten Achse

DF Verketten:

In [98]: df = pd.DataFrame(np.random.randint(10, size=(5, 12))) 

In [99]: df 
Out[99]: 
    0 1 2 3 4 5 6 7 8 9 10 11 
0 0 7 2 9 9 0 7 3 5 8 8 1 
1 4 9 0 4 0 2 4 8 8 7 1 9 
2 2 1 1 2 7 4 4 6 1 2 9 8 
3 1 5 0 8 2 2 4 1 1 4 8 4 
4 4 6 3 2 2 4 1 6 2 6 9 0 

Lösung:

In [107]: df.iloc[:, np.r_[3:5, 6:df.shape[1]]] 
Out[107]: 
    3 4 6 7 8 9 10 11 
0 9 9 7 3 5 8 8 1 
1 4 0 4 8 8 7 1 9 
2 2 7 4 6 1 2 9 8 
3 8 2 4 1 1 4 8 4 
4 2 2 1 6 2 6 9 0 

In [108]: np.r_[3:5, 6:df.shape[1]] 
Out[108]: array([ 3, 4, 6, 7, 8, 9, 10, 11]) 

oder

In [110]: df.columns.difference([0,1,2,5]) 
Out[110]: Int64Index([3, 4, 6, 7, 8, 9, 10, 11], dtype='int64') 

In [111]: df[df.columns.difference([0,1,2,5])] 
Out[111]: 
    3 4 6 7 8 9 10 11 
0 9 9 7 3 5 8 8 1 
1 4 0 4 8 8 7 1 9 
2 2 7 4 6 1 2 9 8 
3 8 2 4 1 1 4 8 4 
4 2 2 1 6 2 6 9 0 
Verwandte Themen