Cómo ignorar NaN al reasignar valores a variables

Cómo ignorar NaN al reasignar valores a variables

Importé y concatené un par de archivos csv. Todos ellos contienen la variable "prac_type", pero las observaciones se enumeran de diferentes maneras. Algunas son cadenas (sí, no, no estoy seguro) mientras que otras son numéricas (1,2,3). Aquí hay un vistazo a la variable:

print(df.prac_type.unique())

[nan 1.0 2.0 3.0 '1' '2' 'Unsure']

Pero solo quiero que 1.0 se fusione con 1 (ya que representan lo mismo), 2.0 que se convierta en 2 y 3.0 y no estoy seguro que se convierta en 3. Quiero que mi variable sea esta:

print(df.prac_type.unique())
[ '1' '2' '3']

Intenté hacer esto:

prac_dic = {'1.0': 1,'2.0': 2 , '3.0':3, 'Unsure':3}
  
df.prac_type = [prac_dic[item] for item in df.prac_type]
print(df.prac_type.unique())

Pero recibo un error (KeyError: nan) porque mi variable prac_type tiene NaN. Sin embargo, no quiero dejar caer los NaN. Entonces, ¿cómo puedo hacer que mi código ignore los valores faltantes y reasigne los valores?

Mostrar la mejor respuesta

¿Podrías darnos el marco de datos? Tal como está, este no es un ejemplo mínimamente reproducible.

Prueba df.prac_type = [prac_dic.get(item) for item in df.prac_type]

Solo agregue una verificación especial en el valor nan

df.prac_type = [prac_dic[item] if pandas.notnull(item) else np.nan for item in df.prac_type ]

https://pandas.pydata.org/docs/reference /api/pandas.isnull.html

Eso funciono gracias! Inicialmente no funcionó porque mi dtype era un objeto, pero lo convirtió a numérico y funcionó bien.