Búsqueda de sitios web

Elimine filas del marco de datos de Pandas con valores faltantes o NaN en columnas


Un conjunto de datos consta de una amplia variedad de valores. Estos valores pueden ser una “cadena”, “entero”, “decimal”, “Booleano” o incluso un “estructura de datos”. Estos conjuntos de datos son extremadamente valiosos y se pueden utilizar con diversos fines. Podemos entrenar modelos, interpretar resultados, producir una hipótesis y crear aplicaciones con la ayuda de un conjunto de datos.

Sin embargo, a veces un conjunto de datos puede contener valores que no son necesarios para nuestro propósito. Estos valores se denominan “NaN” (no un número). En este artículo, nos ocuparemos de estos "NaN" o valores faltantes.

Nuestro objetivo es pasar a aquellas filas que contienen cualquier valor “NaN” del marco de datos de pandas. Crearemos un marco de datos con la ayuda de un conjunto de datos y usaremos las funciones de las bibliotecas de pandas para eliminar filas. Comencemos con el tema.

Creando un marco de datos de Pandas con valores NaN

Un marco de datos de pandas es una disposición tabular de datos 2D que se usa ampliamente para el análisis, interpretación y manipulación de datos. Es un marco fácil de usar que organiza los datos en filas y columnas. Pandas ofrece numerosas funciones que permiten ordenar, fusionar, filtrar y eliminar los datos. Construyamos un marco de datos de pandas.

Ejemplo

En el siguiente ejemplo, pasamos un conjunto de datos de diccionario donde cada clave representa una etiqueta de columna y los valores asociados se encuentran en una lista.

Luego, hemos creado un marco de datos de pandas mediante el método "pd.DataFrame". Pasamos una lista de etiquetas de fila. En el conjunto de datos, asignamos algunos valores "NaN" a través de una biblioteca numpy.

import numpy as np
import pandas as pd

dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
           "Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, numpy.nan, 98, numpy.nan]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is: -")
print(dataframe)

Producción

The original data frame is: -
  Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics    NaN
3       Deepak          NaN               Arts   98.0
4        Swati         18.0  Political science    NaN

Uso de la función dropna() para eliminar filas con valores "NaN"

Podemos usar la función "dropna()" para eliminar filas o columnas del marco de datos.

  • Después de crear el marco de datos, utilizamos la función "dropna()" para eliminar todas las filas que contienen cualquier valor "NaN".

  • Creamos un nuevo marco de datos “drop_dataframe” que contiene los valores modificados y lo imprimimos.

  • Aquí se eliminan la segunda, tercera y cuarta fila.

Ejemplo

import numpy as np
import pandas as pd

dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
           "Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, np.nan, 98, np.nan]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is: -")
print(dataframe)

drop_dataframe = dataframe.dropna()
print("The data frame after dropping the rows: -")
print(drop_dataframe)

Producción

The original data frame is: -
  Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics    NaN
3       Deepak          NaN               Arts   98.0
4        Swati         18.0  Political science    NaN
The data frame after dropping the rows: -
  Student name  Roll number       Major Subject  Marks
1         Ajay         23.0              Maths   57.0

Si no queremos un nuevo marco de datos, simplemente podemos realizar cambios en el existente. Esto se puede lograr pasando una cláusula “inplace=True”.

dataframe.dropna(inplace=True)
print("The data frame after dropping the rows: -")
print(dataframe)

Eliminar una fila completa de valores "NaN"

Podemos pasar la cláusula “how=all” como argumento para que el método “pd.DataFrame” elimine solo aquellas filas en las que todos los valores sean “NaN”.

Ejemplo

import numpy as np
import pandas as pd

dataset = {"Student name": ["Ajay", "Krishna", np.nan, "Swati"], "Roll number": [23, 45, np.nan, 18],
           "Major Subject": ["Maths", "Physics", np.nan, "Political science"], "Marks": [57, 25, np.nan, np.nan]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is: -")
print(dataframe)

dataframe.dropna(how= "all", inplace= True)
print("The data frame after dropping the rows: -")
print(dataframe)

Producción

Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics   25.0
3          NaN          NaN                NaN    NaN
4        Swati         18.0  Political science    NaN
The data frame after dropping the rows: -
  Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics   25.0
4        Swati         18.0  Political science    NaN

Aquí, solo se eliminó la tercera fila porque contenía solo valores "NaN". También podemos aplicar condiciones para eliminar valores "NaN", pero depende del propósito del programador y de cómo quiera estructurar el marco de datos.

Usando la función Fillna() y la función Drop()

Este es un método indirecto para eliminar filas con valores faltantes. Supongamos que no sabemos cuántos valores "NaN" están presentes en un marco de datos. En tal caso, crearemos un programa general para verificar cada columna.

Ejemplo

Usamos la función fillna() para reemplazar todos los valores "NaN" con 1. Después de esto usamos el método ".index" para recuperar los valores de índice de las columnas que contienen 1. Suponiendo que no sabemos cuántas columnas contienen cuánto muchos valores "NaN", incluimos todas las columnas. Usamos la función drop() y pasamos una lista de valores de índice para eliminar las filas.

import numpy as np
import pandas as pd

dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
           "Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, np.nan, 98, np.nan]}

dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is: -")
print(dataframe)

dataframe.fillna(1, inplace= True)
index_values = dataframe[(dataframe["Student name"] == 1) | (dataframe["Roll number"] == 1) |
               (dataframe["Major Subject"] == 1) | (dataframe["Marks"] == 1)].index

dataframe.drop(index_values, inplace=True)
print("The data frame after dropping rows: -")
print(dataframe)

Producción

The original data frame is: -
  Student name  Roll number      Major Subject  Marks
1         Ajay         23.0              Maths   57.0
2      Krishna         45.0            Physics    NaN
3       Deepak          NaN               Arts   98.0
4        Swati         18.0  Political science    NaN
The data frame after dropping rows: -
  Student name  Roll number      Major Subject   Marks
1         Ajay         23.0              Maths    57.0

Conclusión

En este artículo, analizamos una operación básica para eliminar filas que contienen valores “NaN” de un marco de datos de pandas. Preparamos un conjunto de datos apropiado y utilizamos la biblioteca numpy para incluir los valores "NaN" en nuestro conjunto de datos. Entendimos la aplicación de la función “dropna()”. Se eliminaron los datos faltantes y se generó un nuevo marco de datos.

Artículos relacionados: