SimpleImputer

Nombre completo
sklearn.impute.SimpleImputer
Librería
scikit-learn
Sintaxis

class sklearn.impute.SimpleImputer(missing_values=nan, strategy=’mean’, fill_value=None, verbose=0, copy=True)

Descripción

La función sklearn.impute.SimpleImputer permite sustituir valores nulos por otros valores según varias estrategias disponibles. La estrategia a ejecutar se indica mediante el parámetro strategy.

Una vez instanciado el imputador, puede entrenarse con el método fit (que genera un array conteniendo los valores por los que sustituir los valores nulos de cada característica) y puede ejecutarse la sustitución con el método transform. El atributo statistics_ nos da acceso al array de valores a imputar (uno por cada característica). Debe tenerse en cuenta que el resultado del imputador es un array NumPy, no un dataframe.

Parámetros
  • missing_values: Objeto que representa un valor nulo. Puede ser un número, una cadena de texto, np.ana (valor por defecto) o None.
  • strategy: Estrategia a ejecutar. Puede tomar los siguientes valores
    • mean: (opción por defecto) reemplazando los valores nulos con la media de los valores de su misma columna
    • median: reemplazando los valores nulos con la mediana de los valores de su misma columna
    • most_frequent: reemplazando los valores nulos con el valor más frecuente de su misma columna
    • constant: reemplazando los valores nulos con un valor constante, pudiendo ser tanto un número como una cadena de texto

En este último caso, el parámetro fill_value indica el valor en cuestión.

Ejemplos

Partimos del siguiente dataframe:

df = pd.DataFrame({
    "x": [1, np.nan, 4, 2],
    "y": [np.nan, 2, 5, 2],
    "z": [0, 2, np.nan, 4]
})
df

Dataframe de pruebas

Importamos e instanciamos ahora el imputador:

from sklearn.impute import SimpleImputer
si = SimpleImputer()

Lo entrenamos (ya hemos visto que, por defecto, la estrategia es el sustituir los valores nulos por el valor medio de las características):

si.fit(df)

SimpleImputer

Los valores a imputar ya han sido calculados:

si.statistics_

array([2.33333333, 3. , 2. ])

Por último, podríamos generar el array final usando el método transform:

si.transform(df)

Valores transformados

También podríamos haber modificado los datos originales directamente usando el método fit_transform:

si.fit_transform(df)

El método fit_transform

Podríamos sustituir los valores nulos tan solo de una de las características aplicando el imputador solo a la columna correspondiente, considerando que los métodos de entrenamiento de esta función esperan un array de entrada de dos dimensiones:

df["x"] = si.fit_transform(df["x"].values.reshape(-1, 1))
df

Imputando los valores nulos solo de una columna

(en un caso sencillo como éste también podríamos recurrir a la función fillna de pandas).

Enviado por admin el Dom, 28/04/2019 - 10:57