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?

ase completó desde un CSV, y laacolumna contenía la cadena "nan".pandas"inteligentemente" convirtió esto enNaNy 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.locy 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
TrueoFalse. 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