2016-05-11 4 views
0

Ich habe eine DataFrame mit 34 Spalten und etwa 10k Zeilen. Ich möchte nur die Zeilen halten, wo sind die Werte 0 oder 1 in columnindex Positionen 2 bis 33.Wie pandas isin() verwendet, um Werte in einem Bereich von Spalten in einem Datenrahmen zu testen

Ich habe versucht, die folgenden:

df = df[df.iloc[:,2:33].isin([0,1])] 

Aber ich unerwartete Ergebnisse erhalten. Mehrere Spalten werden zurückgegeben NaN.

Jede Hilfe wäre willkommen! Dank ...

+0

Es gibt einen Syntaxfehler in dem Code zu sein scheint, Sie auf dem Laufenden, werfen Sie einen Blick und sehen, wenn es mit dem Code übereinstimmt, den Sie tatsächlich verwenden. Sollte es am Ende ein '' '' geben? – Jezzamon

Antwort

0

Setup-

df = pd.DataFrame(np.random.rand(10000, 5)*10, columns=list('ABCDE')).astype(int) 

Lösung

df[((df == 0) | (df == 1)).any(axis=1)] 

Ihr Problem

df[((df.iloc[:,2:33] == 0) | (df.iloc[:,2:33] == 1)).any(axis=1)] 
+0

Ich stellte fest, ich hatte einige Probleme mit dem Datentyp. Ich hatte zuvor die Nullen entfernt, aber es gab ein paar Zeilen, in denen ich einige Leerzeichen hatte, die ich vermisste. Sobald diese weg waren, machte ich alle Datentypen int, und piRSquared's Beispiel funktionierte. – Clickitysplit

+0

Eine wichtige Sache, die ich geändert habe, war, dass ich alle() auf alle() umgestellt habe, wie: df [(df.iloc [:, 2: 5] <= 1) .all (axis = 1)] – Clickitysplit

Verwandte Themen