2016-05-22 6 views
1

Ich habe einen Pandas-Datenframe namens df, der mehrere Spalten und eine df['MY STATE']-Spalte enthält. Mein Ziel ist es, alle Zeilen aus dem Datenrahmen zu entfernen, die keine US-Zustände enthalten. Ich möchte dies tun, indem ich den Wert in der Zelle mit einer Pandas-Reihe vergleiche, die alle Zustandsabkürzungen enthält. Ich habe Leute so etwas wie die folgenden verwenden gesehen einen Datenrahmen zu reinigen:Löschen von Pandas-Datenframe-Zeilen, wenn der Wert in einer gegebenen Spalte nicht in einer Liste enthalten ist

df = df[df['COST'] <= 0] 

Aber etwas wie das, was ich brauche (unten) funktioniert nicht

df = df[df['MY STATE'] not in states['Abbreviation'].values] 

Gibt es eine Möglichkeit, dies einfach zu tun?

Ich habe gelesen, dass df.query() kann verwendet werden, um etwas wie das zu tun, aber ich habe noch kein Beispiel gefunden, und habe auch gelesen, dass df.query() kann nicht verwendet werden, wenn ein Leerzeichen im Namen der Spalte ist.

Danke,

Michael

Antwort

2

IIUC Sie isin mit inverser Operator ~ verwenden:

df = df[~df['MY STATE'].isin(states['Abbreviation'].values)] 
+0

Das funktionierte perfekt. Als ich es jedoch implementiert habe, habe ich festgestellt, dass einige der Zeilen keine Werte enthalten oder "Nan" sind. Kann ich dies ändern, um auch diese Zeilen im Datenrahmen zu behalten. –

+0

Können Sie Daten hinzufügen? Vielleicht 5-6 Zeilen, bitte fügen Sie auch problematische Zeilen hinzu. Vielen Dank. Sie können diesen Datenrahmen ändern 'df = pd.DataFrame ({'MEIN ZUSTAND': ['a', 'b', '', np.nan], 'B': [4,5,6,5], 'C': [7,8,9,7]}) 'Und was ist' states ['Abkürzung'] '? 'Serie' oder' Diktat'? – jezrael

+0

Eigentlich im Sinne von Stack Exchange, sollte ich dies wohl zum Thema behalten und das als separate Frage stellen, wenn ich es nicht herausfinden kann. Ich dachte, es könnte eine kurze, schnelle Änderung sein. Danke für Ihre Hilfe. –

Verwandte Themen