No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Codificación de valores faltantes

8/21
Recursos

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Codificacion de valores Faltantes

Asumir que los datos faltantes siempre vendran en un unico formato es un error.

Algunas formas en que se representa los datos faltantes son: NA, N/A, na, Missing, -1, -77, no available

  • Valores comunmente asociados a valores faltantes. Cadenas de texto
common_na_strings = (
    "missing",
    "NA",
    "N A",
    "N/A",
    "#N/A",
    "NA ",
    " NA",
    "N /A",
    "N / A",
    " N / A",
    "N / A ",
    "na",
    "n a",
    "n/a",
    "na ",
    " na",
    "n /a",
    "n / a",
    " a / a",
    "n / a ",
    "NULL",
    "null",
    "",
    "?",
    "*",
    ".",
)
  • Valores comunmente asociados a valores faltantes. Numeros
common_na_numbers = (-9, -99, -999, -9999, 9999, 66, 77, 88, -1)
  • DataFrame con valores faltantes
missing_data_example_df = pd.DataFrame.from_dict(
    dict(
        x = [1, 3, "NA", -99, -98, -99],
        y = ["A", "N/A", "NA", "E", "F", "G"],
        z = [-100, -99, -98, -101, -1, -1]
    )
)

missing_data_example_df
  • Buscando valores faltantes con la funcion number_missing()
missing_data_example_df.missing.number_missing()
--> 0     # arroja cero debido a que no reconoce los diferentes tipos de datos faltantes
  • Conocer las columnas donde hay valores faltantes mediante el tipo de dato
missing_data_example_df.dtypes
--> x    object
		y    object
		z     int64
		dtype: object
# La columna x solo tiene 1 string y pandas reconoce toda la columna como object
# por tanto se intuye que en dicha columna existen valores faltantes
  • Detectar valores faltantes revisando valores unicos de los datos
missing_data_example_df.x.unique()
--> array([1, 3, 'NA', -99, -98], dtype=object)
# solamente puedes revisar columna por columna y sirve para dataframe pequeños
  • Detectar valores faltantes revisando los valores unicos de las variables de un determinado tipo
(
    missing_data_example_df
    .select_dtypes(object)
    .apply(pd.unique)
)

--> x     [1, 3, NA, -99, -98]
		y    [A, N/A, NA, E, F, G]
		dtype: object
# selecciona las variables de tipo object y regresa sus valores unicos

Sustituyendo valores comunmente asociados a valores faltantes

  • Sustitucion desde la lectura de los datos
pd.read_csv(
    './data/missing_data_enconding_example.csv',
    na_filter=True,
    na_values=[-99, -1]
)
# sustituye los valores -99 y -1 por nan desde el archivo raiz
# de esta manera pandas detecta que son valores faltantes
  • Sustitucion Global
(
    missing_data_example_df
    .replace(
        to_replace=[-99, 'NA'],
        value= np.nan
    )
)
# sustituye todos los valores -99 y NA por nan desde el dataframe
  • Sustitucion Dirigida
(
    missing_data_example_df
    .replace(
        to_replace={
            'x':{
                -99:np.nan
            }
        }
    )
)
# Sustituye los valores -99 por nan solo en la variable x del dataframe

Creo que a la hora de reemplazar los datos es mejor revisar por columna y hacer un reemplazo con más control, pues a pesar de tardar más tiempo se pueden adaptar a las condiciones de cada columna de datos.

Tambien se puede apoyar en expresiones regulares para escarbar en busca de valores faltantes que sean colocados de manera rara. Pero esto conllevaria a una creacion generalmente unica por columna, ya que podria en una variable aplicar y en otra no.

¿Alguien más que se haya sorprendido de no ver en la lista a estos dos personajes? :

"NaN",
"nan"

Muy interesante este otro tipo de manera en que las personas escriben cuando no tienen el dato, otro caso es explorar los datos con criterio conociendo que se busca, por ejemplo un dato negativo hablando de tiempo no tiene sentido, entonces también serian datos de tener cuidado.

common_na_strings = (
'missing',
'NA',
'N A',
'#N/A',
'NA ',
' NA',
'N /A',
'N / A',
' N / A ',
'na'
)