Trabajando con Datos Faltantes en Pandas

Los datos faltantes pueden ocurrir cuando no se proporciona información para uno o más elementos o para una unidad completa. La falta de datos es un problema muy grande en escenarios de la vida real. Los datos faltantes también pueden referirse a valores NA (no disponibles) en pandas. En DataFrame, a veces, muchos conjuntos de datos simplemente llegan con datos faltantes, ya sea porque existen y no se recopilaron o porque nunca existieron. Por ejemplo, suponga que diferentes usuarios encuestados pueden optar por no compartir sus ingresos, algunos usuarios pueden optar por no compartir la dirección de esta manera, muchos conjuntos de datos desaparecieron. En Pandas, los datos que faltan están representados por dos valores:

  • Ninguno: Ninguno es un objeto único de Python que a menudo se usa para datos faltantes en el código de Python.
  • NaN: NaN (un acrónimo de Not a Number), es un valor especial de punto flotante reconocido por todos los sistemas que utilizan la representación estándar de punto flotante IEEE

Pandas trata a None y NaN como esencialmente intercambiables para indicar valores faltantes o nulos. Para facilitar esta convención, existen varias funciones útiles para detectar, eliminar y reemplazar valores nulos en Pandas DataFrame:

En este artículo estamos usando un archivo CSV, para descargar el archivo CSV usado, haga clic aquí .

Comprobación de valores faltantes usando isnull() y notnull()

Para verificar los valores faltantes en Pandas DataFrame, usamos una función isnull() y notnull(). Ambas funciones ayudan a verificar si un valor es NaN o no. Esta función también se puede usar en Pandas Series para encontrar valores nulos en una serie.

Comprobación de valores faltantes usando isnull()

Para verificar los valores nulos en Pandas DataFrame, usamos la función isnull(), esta función devuelve un marco de datos de valores booleanos que son verdaderos para los valores NaN. Código #1: 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score':[np.nan, 40, 80, 98]}
 
# creating a dataframe from list
df = pd.DataFrame(dict)
 
# using isnull() function 
df.isnull()

Salida:   Código #2: 

Python

# importing pandas package
import pandas as pd
   
# making data frame from csv file
data = pd.read_csv("employees.csv")
   
# creating bool series True for NaN values
bool_series = pd.isnull(data["Gender"])
   
# filtering data
# displaying data only with Gender = NaN
data[bool_series]

Salida: como se muestra en la imagen de salida, solo se muestran las filas que tienen Género = NULL.  

Comprobación de valores faltantes usando notnull()

Para verificar los valores nulos en Pandas Dataframe, usamos la función notnull(), esta función devuelve el marco de datos de valores booleanos que son falsos para los valores NaN. Código #3: 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score':[np.nan, 40, 80, 98]}
 
# creating a dataframe using dictionary
df = pd.DataFrame(dict)
 
# using notnull() function
df.notnull()

Salida:   Código #4: 

Python

# importing pandas package
import pandas as pd
   
# making data frame from csv file
data = pd.read_csv("employees.csv")
   
# creating bool series True for NaN values
bool_series = pd.notnull(data["Gender"])
   
# filtering data
# displaying data only with Gender = Not NaN
data[bool_series]

Salida: como se muestra en la imagen de salida, solo se muestran las filas que tienen Sexo = NO NULO.  

Rellenar valores faltantes usando fillna(), replace() e interpolate()

Para completar los valores nulos en un conjunto de datos, usamos las funciones fillna(), replace() e interpolate(). Estas funciones reemplazan los valores NaN con algún valor propio. Todas estas funciones ayudan a llenar valores nulos en conjuntos de datos de un DataFrame. La función Interpolate() se usa básicamente para completar los valores NA en el marco de datos, pero utiliza varias técnicas de interpolación para completar los valores faltantes en lugar de codificar el valor. Código #1: Llenar valores nulos con un solo valor 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score':[np.nan, 40, 80, 98]}
 
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
 
# filling missing value using fillna() 
df.fillna(0)

Salida:   Código #2: Llenar valores nulos con los anteriores 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score':[np.nan, 40, 80, 98]}
 
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
 
# filling a missing value with
# previous ones 
df.fillna(method ='pad')

Salida:   Código #3: Relleno de valor nulo con los siguientes 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score':[np.nan, 40, 80, 98]}
 
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
 
# filling  null value using fillna() function 
df.fillna(method ='bfill')

Salida:   Código #4: Relleno de valores nulos en el archivo CSV 

Python

# importing pandas package
import pandas as pd
   
# making data frame from csv file
data = pd.read_csv("employees.csv")
 
# Printing the first 10 to 24 rows of
# the data frame for visualization  
data[10:25]

Now we are going to fill all the null values in Gender column with “No Gender” 

Python

# importing pandas package
import pandas as pd
   
# making data frame from csv file
data = pd.read_csv("employees.csv")
 
# filling a null values using fillna()
data["Gender"].fillna("No Gender", inplace = True)
 
data

Salida: Código #5: Llenar valores nulos usando el método replace() 

Python

# importing pandas package
import pandas as pd
   
# making data frame from csv file
data = pd.read_csv("employees.csv")
 
# Printing the first 10 to 24 rows of
# the data frame for visualization  
data[10:25]

Salida: ahora vamos a reemplazar todo el valor de Nan en el marco de datos con un valor de -99. 

Python

# importing pandas package
import pandas as pd
   
# making data frame from csv file
data = pd.read_csv("employees.csv")
   
# will replace  Nan value in dataframe with value -99 
data.replace(to_replace = np.nan, value = -99)

Salida:   Código #6: Usar la función interpolar() para llenar los valores que faltan usando el método lineal. 

Python

# importing pandas as pd
import pandas as pd
   
# Creating the dataframe 
df = pd.DataFrame({"A":[12, 4, 5, None, 1],
                   "B":[None, 2, 54, 3, None],
                   "C":[20, 16, None, 3, 8],
                   "D":[14, 3, None, None, 6]})
   
# Print the dataframe
df

Let’s interpolate the missing values using Linear method. Note that Linear method ignore the index and treat the values as equally spaced. 

Python

# to interpolate the missing values
df.interpolate(method ='linear', limit_direction ='forward')

Salida: como podemos ver en la salida, los valores de la primera fila no se pudieron completar porque la dirección de llenado de los valores es hacia adelante y no hay un valor anterior que se haya podido usar en la interpolación.  

Descartar valores perdidos usando dropna()

Para eliminar valores nulos de un marco de datos, utilizamos la función dropna(), esta función elimina filas/columnas de conjuntos de datos con valores nulos de diferentes maneras. Código n. ° 1: eliminar filas con al menos 1 valor nulo. 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score':[52, 40, 80, 98],
        'Fourth Score':[np.nan, np.nan, np.nan, 65]}
 
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
   
df

Now we drop rows with at least one Nan value (Null value) 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score':[52, 40, 80, 98],
        'Fourth Score':[np.nan, np.nan, np.nan, 65]}
 
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
 
# using dropna() function 
df.dropna()

Salida: Código #2: Eliminar filas si faltan todos los valores en esa fila. 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, np.nan, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score':[52, np.nan, 80, 98],
        'Fourth Score':[np.nan, np.nan, np.nan, 65]}
 
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
   
df

Now we drop a rows whose all data is missing or contain null values(NaN) 

Python

# importing pandas as pd
import pandas as pd
 
# importing numpy as np
import numpy as np
 
# dictionary of lists
dict = {'First Score':[100, np.nan, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score':[52, np.nan, 80, 98],
        'Fourth Score':[np.nan, np.nan, np.nan, 65]}
 
df = pd.DataFrame(dict)
 
# using dropna() function   
df.dropna(how = 'all')

Salida: Código #3: Eliminación de columnas con al menos 1 valor nulo. 

Python

# importing pandas as pd
import pandas as pd
  
# importing numpy as np
import numpy as np
  
# dictionary of lists
dict = {'First Score':[100, np.nan, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score':[52, np.nan, 80, 98],
        'Fourth Score':[60, 67, 68, 65]}
 
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
    
df

Now we drop a columns which have at least 1 missing values 

Python

# importing pandas as pd
import pandas as pd
  
# importing numpy as np
import numpy as np
  
# dictionary of lists
dict = {'First Score':[100, np.nan, np.nan, 95],
        'Second Score': [30, np.nan, 45, 56],
        'Third Score':[52, np.nan, 80, 98],
        'Fourth Score':[60, 67, 68, 65]}
 
# creating a dataframe from dictionary 
df = pd.DataFrame(dict)
 
# using dropna() function    
df.dropna(axis = 1)

Salida:   Código n. ° 4: filas descartadas con al menos 1 valor nulo en el archivo CSV 

Python

# importing pandas module
import pandas as pd
   
# making data frame from csv file
data = pd.read_csv("employees.csv")
   
# making new data frame with dropped NA values
new_data = data.dropna(axis = 0, how ='any')
   
new_data

Salida: ahora comparamos los tamaños de los marcos de datos para que podamos saber cuántas filas tenían al menos 1 valor nulo 

Python

print("Old data frame length:", len(data))
print("New data frame length:", len(new_data))
print("Number of rows with at least 1 NA value: ", (len(data)-len(new_data)))

Producción : 

Old data frame length: 1000
New data frame length: 764
Number of rows with at least 1 NA value:  236

Dado que la diferencia es 236, había 236 filas que tenían al menos 1 valor nulo en cualquier columna.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *