Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Valores nan

Tuve un inconveniente con la variable Churn, ya que contenía valores NaN.
Al convertir los valores de Yes/No a 0/1, los datos quedaron como tipo object.
Cuando guardé y volví a cargar el archivo de datos limpios, los valores aparecieron como 0.0, 1.0 y NaN (tipo float).

En un inicio intenté pasarlos a 0, 1 y NaN, pero al cambiar el tipo a int64, los NaN se transformaron en , lo que terminó siendo más problemático. Por eso, finalmente decidí dejarlos como estaban originalmente.

Mi duda es:
¿Existe alguna forma de asegurar que los valores 0 y 1 se mantengan como enteros al descargar y volver a cargar los datos, sin convertirse en flotantes?
Noté además que en el caso de Churn aparecían como '1' y '0' (con comillas, es decir como string), a diferencia de otras variables sin NaN que se mantenían como [1, 0]. ¿Esto pudo haber influido en la modificación de mis datos?

¿Hay alguna forma de solucionarlo?. Mi mayor preocupación es que los valores 0.0 y 1.0 me generen problemas en el futuro, quizá no sean reconocibles.

Espero haberlo explicado bien. Muchas gracias de antemano :)

1 respuesta

Hola Selene, espero que estés bien

Gracias por compartir tu duda de manera tan detallada. Entiendo que estás enfrentando un problema común al manejar datos con valores NaN y conversiones entre tipos de datos. Vamos a intentar solucionarlo.

El problema que describes ocurre porque, al tener valores NaN en una columna de pandas, el tipo de dato de la columna se convierte automáticamente a float, ya que NaN es un valor de punto flotante. Esto es lo que causa que tus 0 y 1 se conviertan en 0.0 y 1.0.

Para mantener los valores como enteros, puedes usar la biblioteca pandas de la siguiente manera:

  1. Convertir los valores a un tipo de dato entero que soporte valores nulos: pandas ofrece el tipo Int64 que permite la presencia de valores nulos representados como <NA>. Aquí está cómo podrías hacerlo:
import pandas as pd
import numpy as np

# Supongamos que 'df' es tu DataFrame y 'Churn' es la columna que estás tratando de convertir
df['Churn'] = df['Churn'].replace({'Yes': 1, 'No': 0})
df['Churn'] = df['Churn'].astype('Int64')
  1. Guardar y cargar los datos: Asegúrate de guardar el DataFrame usando un formato que preserve los tipos de datos, como parquet o feather, en lugar de CSV, que es más propenso a convertir los tipos de datos.
# Guardar
df.to_parquet('datos.parquet')

# Cargar
df = pd.read_parquet('datos.parquet')

Sobre tu observación acerca de los valores '1' y '0' como strings, esto puede influir en la manera en que los datos son interpretados al cargarlos de nuevo. Asegúrate de que, al realizar la conversión inicial de 'Yes'/'No' a 1/0, los valores sean enteros antes de guardar el archivo.

Espero que estos pasos te ayuden a mantener tus datos en el formato deseado. ¡Buenos estudios!