Quiero encontrar filas que contengan una cadena, así:
DF[DF.col.str.contains("foo")]
Sin embargo, esto falla porque algunos elementos son NaN:
ValueError: no se puede indexar con un vector que contiene valores NA / NaN
Entonces recurro a lo ofuscado
DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")]
¿Existe una forma mejor?
a
se completó desde un CSV, y laa
columna contenía la cadena "nan".pandas
"inteligentemente" convirtió esto enNaN
y comencé a quejarme cuando traté de hacerlodf.a.str.contains()
. Entonces sí, protip: asegúrese de configurar el tipo de columnaread_csv()
o luego haga algo comodf = df.where(pandas.notnull(df), "nan")
LOLdf.loc
y no solodf
?Además de las respuestas anteriores, diría que para las columnas que no tienen un nombre de una sola palabra, puede usar: -
Espero que esto ayude.
fuente
No estoy al 100% de por qué (en realidad vine aquí para buscar la respuesta), pero esto también funciona y no requiere reemplazar todos los valores nan.
Funciona con o sin
.loc
.No tengo idea de por qué funciona esto, ya que lo entiendo cuando indexa con corchetes, pandas evalúa lo que esté dentro del corchete como
True
oFalse
. No puedo decir por qué hacer que la frase entre corchetes sea 'extra booleana' tiene algún efecto.fuente
También puedes patern:
fuente
fuente