2016-05-30 23 views
2

Ich bin neu in der Programmierung und habe angefangen, Python zu lernen, um einige Aufgaben effizienter zu machen. Ich führe einen PCA im Pandas-Modul (Ich fand ein Tutorial online) und habe das Skript dafür, aber muss einen Teil eines Datenrahmens vor dem PCA subselektieren.Pandas Dataframe-Unterselektion

bisher habe ich (nur zum Beispiel in Wirklichkeit lese ich eine CSV-Datei mit einer größeren Matrix)

x = np.random.randint(30, size=(8,8)) 
df = pd.DataFrame(x) 

    0 1 2 3 4 5 6 7 
0 9 0 23 13 2 5 14 6 
1 20 17 11 10 25 23 20 23 
2 15 14 22 25 11 15 5 15 
3 9 27 15 27 7 15 17 23 
4 12 6 11 13 27 11 26 20 
5 27 13 5 16 5 5 2 18 
6 3 18 22 0 7 10 11 11 
7 25 18 10 11 29 29 1 25 

Was ich tun möchte, ist Unter Spalten auswählen, die bestimmte Kriterien in jeder erfüllen die Zeilen, und zwar mag ich jede Spalte, die

mindestens eine Zahl => 27 (nur zum Beispiel)
0 1 3 4 5 
0 9 0 13 2 5 
1 20 17 10 25 23 
2 15 14 25 11 15 
3 9 27 27 7 15 
4 12 6 13 27 11 
5 27 13 16 5 5 
6 3 18 0 7 10 
7 25 18 11 29 29 

ich sehe in die verschiedenen Slicing-Methoden in Pandas habe einen neuen Datenrahmen zu erzeugen, hat aber keine scheinen zu tun was ich will (.loc und .iloc etc.).

Das eigentliche Skript verwende ich so weit zu lesen in ist

filename = 'Data.csv' 
data = pd.read_csv(filename,sep = ',') 
x = data.ix[:,1:] # variables - species 
y = data.ix[:,0] # cases - age 

so ein Unter dataframme von x ist, was ich bin nach (wie oben).

Jeder Rat wird sehr geschätzt.

Antwort

1

Indexer wie loc, iloc und ix akzeptieren boolesche Arrays. Wenn Sie beispielsweise drei Spalten haben, gibt df.loc[:, [True, False, True]] alle Zeilen und die Spalten 0 und 2 zurück (wenn der entsprechende Wert True ist). Sie können prüfen, ob eines der Elemente in einer Spalte größer als oder gleich 27 ist ((df>=27).any()). Dies gibt True für die Spalten zurück, die mindestens einen Wert> = 27 haben. So können Sie den Datenrahmen in Scheiben schneiden mit:

df.loc[:, (df>=27).any()] 
Out[34]: 
    0 1 3 4 5 7 
0 8 2 28 9 14 21 
1 24 26 23 17 0 0 
2 3 24 7 15 4 28 
3 29 17 12 7 7 6 
4 5 3 10 24 29 14 
5 23 21 0 16 23 13 
6 22 10 27 1 7 24 
7 9 27 2 27 17 12 

Und dies ist der erste Datenrahmen:

df 
Out[35]: 
    0 1 2 3 4 5 6 7 
0 8 2 7 28 9 14 26 21 
1 24 26 15 23 17 0 21 0 
2 3 24 26 7 15 4 7 28 
3 29 17 9 12 7 7 0 6 
4 5 3 13 10 24 29 22 14 
5 23 21 26 0 16 23 17 13 
6 22 10 19 27 1 7 9 24 
7 9 27 26 2 27 17 8 12