Búsqueda de sitios web

Cómo completar los datos faltantes usando pandas de Python


Los datos faltantes son cosa del pasado cuando utilizas Python pandas.

Sin duda, la limpieza de datos requiere mucho tiempo en la ciencia de datos, y los datos faltantes son uno de los desafíos que enfrentará con frecuencia. Pandas es una valiosa herramienta de manipulación de datos de Python que le ayuda a corregir valores faltantes en su conjunto de datos, entre otras cosas.

Puede corregir los datos faltantes quitándolos o rellenándolos con otros valores. En este artículo, explicaremos y exploraremos las diferentes formas de completar los datos faltantes usando pandas.

Configura Pandas y prepara el conjunto de datos

Antes de comenzar, asegúrese de instalar pandas en su entorno virtual Python usando pip a través de su terminal:

pip install pandas

Puede seguir cualquier conjunto de datos. Este podría ser un archivo de Excel cargado con Pandas.

Pero usaremos los siguientes datos simulados a lo largo de este artículo: es un DataFrame que contiene algunos valores faltantes o nulos (Nan).

import pandas
import numpy
df = pandas.DataFrame({
    'A' :[0, 3, numpy.nan, 10, 3, numpy.nan], 
    'B' : [numpy.nan, numpy.nan, 7.13, 13.82, 7, 7], 
    'C' : [numpy.nan, "Pandas", numpy.nan, "Pandas", "Python", "JavaScript"],
    'D' : ["Sound", numpy.nan, numpy.nan, "Music", "Songs", numpy.nan] 
})
print(df)

El conjunto de datos se ve así:

Ahora, vea cómo puede completar estos valores faltantes utilizando los diversos métodos disponibles en pandas.

1. Utilice el método fillna()

La función fillna() itera a través de su conjunto de datos y llena todas las filas vacías con un valor específico. Este podría ser la media, la mediana, el modal o cualquier otro valor.

Esta operación de pandas acepta algunos argumentos opcionales; tome nota de lo siguiente:

  • valor: este es el valor calculado que desea insertar en las filas que faltan.
  • método: le permite completar los valores faltantes hacia adelante o hacia atrás. Acepta un parámetro bfill o ffill.
  • inplace: acepta una declaración condicional. Si es True, modifica el DataFrame de forma permanente. De lo contrario, no es así.

Veamos las técnicas para completar los datos faltantes con el método fillna().

Complete los valores faltantes con media, mediana o moda

Este método implica reemplazar los valores faltantes con promedios calculados. Completar los datos faltantes con un valor medio o mediano se aplica cuando las columnas involucradas tienen tipos de datos enteros o flotantes.

También puede completar los datos faltantes con el valor de la moda, que es el valor que aparece con mayor frecuencia. Esto también es aplicable a números enteros o flotantes. Pero es más útil cuando las columnas en cuestión contienen cadenas.

A continuación se explica cómo insertar la media y la mediana en las filas que faltan en el DataFrame:

# To insert the mean value of each column into its missing rows:
df.fillna(df.mean(numeric_only=True).round(1), inplace=True)
# For median:
df.fillna(df.median(numeric_only=True).round(1), inplace=True)
print(df)

El argumento numeric_only establecido como Verdadero garantiza que las tendencias promedio solo se apliquen a las columnas que contienen números enteros y flotantes.

Dado que no puede calcular promedios numéricos en columnas de cadena, en su lugar desea obtener el valor modal para ellas. Sin embargo, usaremos un enfoque ligeramente diferente para el valor modal:

string_columns = df.select_dtypes(include=['object']).columns
df[string_columns] = df[string_columns].fillna(df[string_columns].mode().iloc[0])
print(df)

El código anterior seleccionará solo columnas de cadena del DataFrame y completará Nan en cada una con su valor modal.

También puedes insertar el modo en una columna específica, por ejemplo, la columna C:

df['C'].fillna(df['C'].mode()[0], inplace=True)

Si desea ser específico de la columna al insertar la media, la mediana o la moda:

df.fillna({"A":df['A'].mean(), 
           "B": df['B'].median(), 
           "C": df['C'].mode()[0]}, 
          inplace=True)
print(df)

Rellene filas nulas con valores usando relleno

Esto implica especificar la dirección de relleno dentro de la función fillna(). Este método llena cada fila que falta con el valor de la más cercana encima.

También podrías llamarlo llenado anticipado:

df.fillna(method='ffill', inplace=True)

Complete las filas que faltan con valores usando bfill

Aquí, reemplazará el método ffill mencionado anteriormente con bfill. Llena cada fila que falta en el DataFrame con el valor más cercano debajo de ella.

Este se llama relleno hacia atrás:

df.fillna(method='bfill', inplace=True)

Es posible que desees combinar fill y bfill para completar los datos faltantes en ambas direcciones. Esto evita el llenado parcial de datos.

2. El método reemplazar()

Este método es útil para reemplazar valores que no sean celdas vacías, ya que no se limita a valores Nan. Altera cualquier valor especificado dentro del DataFrame.

Sin embargo, al igual que el método fillna(), puedes usar replace() para reemplazar los valores Nan en una columna específica con la media y la mediana. , modo o cualquier otro valor. Y también acepta el argumento de palabra clave inplace.

Vea cómo funciona esto reemplazando las filas nulas en una columna con nombre con su media, mediana o moda:

import pandas
import numpy 
# Replace the null values with the mean:
df['A'].replace([numpy.nan], df['A'].mean(), inplace=True)
# Replace column A with the median:
df['B'].replace([numpy.nan], df['B'].median(), inplace=True)
# Use the modal value for column C:
df['C'].replace([numpy.nan], df['C'].mode()[0], inplace=True)
print(df)

3. Complete los datos faltantes con interpolar()

La función interpolate() utiliza valores existentes en el DataFrame para estimar las filas que faltan. Establecer la palabra clave inplace en True altera el DataFrame de forma permanente.

Sin embargo, este método solo se aplica a columnas numéricas, ya que utiliza estimación matemática para cubrir los roles faltantes.

Ejecute el siguiente código para ver cómo funciona:

# Interpolate backwardly across the column:
df.interpolate(method ='linear', limit_direction ='backward', inplace=True)
# Interpolate in forward order across the column:
df.interpolate(method ='linear', limit_direction ='forward', inplace=True)

El código anterior selecciona automáticamente solo columnas numéricas en el DataFrame.

Trate con cuidado las filas que faltan

Si bien solo hemos considerado completar los datos faltantes con valores predeterminados como promedios, moda y otros métodos, existen otras técnicas para corregir los valores faltantes. Los científicos de datos, por ejemplo, a veces eliminan estas filas faltantes, según el caso.

Es esencial pensar críticamente sobre su estrategia antes de usarla. De lo contrario, podría obtener resultados de predicción o análisis no deseados. Algunas estrategias y análisis iniciales de visualización de datos también podrían ayudar.

Artículos relacionados: