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.