Ich möchte Zeilen finden, die eine Zeichenfolge enthalten, wie folgt:
DF[DF.col.str.contains("foo")]
Dies schlägt jedoch fehl, da einige Elemente NaN sind:
ValueError: Kann nicht mit einem Vektor indizieren, der NA / NaN-Werte enthält
Also greife ich auf das Verschleierte zurück
DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")]
Gibt es einen besseren Weg?
a
eine CSV-Datei vorhanden war und diea
Spalte die Zeichenfolge "nan" enthielt.pandas
"intelligent" wandelte dies umNaN
und begann sich zu beschweren, als ich es versuchtedf.a.str.contains()
. Also ja, Protip: Stellen Sie sicher, dass Sie den Spaltentyp einstellenread_csv()
oder danach etwas wiedf = df.where(pandas.notnull(df), "nan")
LOL tundf.loc
und nicht nurdf
?Zusätzlich zu den obigen Antworten würde ich sagen, dass Sie für Spalten, die keinen einzelnen Wortnamen haben, Folgendes verwenden können:
Hoffe das hilft.
quelle
Ich weiß nicht zu 100% warum (bin tatsächlich hierher gekommen, um nach der Antwort zu suchen), aber das funktioniert auch und erfordert nicht das Ersetzen aller Nanowerte.
Funktioniert mit oder ohne
.loc
.Ich habe keine Ahnung, warum dies funktioniert, da ich es verstehe, wenn Sie mit Klammern indizieren. Pandas bewertet alles, was sich in der Klammer befindet, als entweder
True
oderFalse
. Ich kann nicht sagen, warum das Setzen der Phrase in den Klammern "extra boolean" überhaupt einen Effekt hat.quelle
Sie können auch patern:
quelle
quelle