Antes tenía (768, 9) observaciones y luego de ejecutar tiene: (392, 9) Por eso mucho cuidado con eliminar valores perdidos.
# remover filas con na
df.dropna(inplace=True) # Elimina todas las filas que tenga un valor perdido, pero puede ser que elimine sólo una columna con el parámetro axis. Otro parámetro importante es el subset donde le indico en que columnas tiene que fijarse.
# mirar el resultado final
df.shape
# reemplazar con la media
df.fillna(df.mean(), inplace=True)
print(df.shape)
print(df.head().round(2))
La librería "scikit-learn" proporciona la clase de preprocesamiento "SimpleImputer" que se puede usar para reemplazar los valores perdidos.
Es una clase flexible que le permite especificar el valor a reemplazar (puede ser algo diferente a NaN) y la técnica utilizada para reemplazarlo (como media, mediana o moda). La clase `"SimpleImputer" opera directamente en la matriz NumPy en lugar del DataFrame.
El siguiente ejemplo usa la clase SimpleImputer para reemplazar los valores faltantes con la media de cada columna y luego imprime el número de valores de NaN en la matriz transformada.
from numpy import nan
from numpy import isnan
from pandas import read_csv
from sklearn.impute import SimpleImputer
url='https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv'
df= pd.read_csv(url,sep=',', header=None)
df=df.replace(0, np.nan)
print(df.shape)
print(df.head())
# Crear un numpy array con los valores
valores = df.values
# definir el imputador
imputador = SimpleImputer(missing_values=np.nan, strategy='mean') # Definir el imputador
# trabsformar el dataset
transformados = imputador.fit_transform(valores) # El método fit es lo que tiene que aprender para imputar en ese ejemplo la media. Entrenar para imputar.
# Contar el numero de NaN en cada columna
print('Missing: %d' % isnan(transformados).sum())
transformados=pd.DataFrame(transformados)
#transformados= transformados.rename(columns={0: "NEMB", 1: "GLU", 2: "PART",3:"GROS",4:"HUR",5:"BMI",6:"FPRED",7:"AGE",8:"CLASS"})
print(transformados.head().round(2))
# Crear un numpy array con los valores
valores = df.values
# definir el imputador
imputador = SimpleImputer(missing_values=np.nan, strategy='median')
# trabsformar el dataset
transformados = imputador.fit_transform(valores)
# Contar el numero de NaN en cada columna
print('Missing: %d' % isnan(transformados).sum())
transformados=pd.DataFrame(transformados)
#transformados= transformados.rename(columns={0: "NEMB", 1: "GLU", 2: "PART",3:"GROS",4:"HUR",5:"BMI",6:"FPRED",7:"AGE",8:"CLASS"})
print(transformados.head().round(2))
# Crear un numpy array con los valores
valores = df.values
# definir el imputador
imputador = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
# trabsformar el dataset
transformados = imputador.fit_transform(valores)
# Contar el numero de NaN en cada columna
print('Missing: %d' % isnan(transformados).sum())
transformados=pd.DataFrame(transformados)
#transformados= transformados.rename(columns={0: "NEMB", 1: "GLU", 2: "PART",3:"GROS",4:"HUR",5:"BMI",6:"FPRED",7:"AGE",8:"CLASS"})
print(transformados.head().round(2))
# Crear un numpy array con los valores
valores = df.values
# definir el imputador
imputador = SimpleImputer(missing_values=np.nan, strategy='constant',fill_value=10)
# trabsformar el dataset
transformados = imputador.fit_transform(valores)
# Contar el numero de NaN en cada columna
print('Missing: %d' % isnan(transformados).sum())
transformados=pd.DataFrame(transformados)
#transformados= transformados.rename(columns={0: "NEMB", 1: "GLU", 2: "PART",3:"GROS",4:"HUR",5:"BMI",6:"FPRED",7:"AGE",8:"CLASS"})
print(transformados.head().round(2))
Se importa la librería "missingno" con el método matrix.
url='https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv'
df= pd.read_csv(url,sep=',', header=None)
print(df.shape)
df=df.replace(0, np.nan)
print(df.shape)
!pip install missingno
import missingno as msno
%matplotlib inline
msno.matrix(df)