Eliminar filas o columnas con valores nulos en Python

Publicado el 29 junio 2018 por Daniel Rodríguez @analyticslane

La existencia de valores nulos en cualquier conjunto de datos supone un problema a la hora de realizar cualquier análisis. Saber cómo eliminar estos valores de manera fácil es clave de cara a automatizar los procesos de análisis. En esta entrada se va a explicar la forma de eliminar las filas o columnas que contenga valores nulos en Python. En primer lugar, se explicará la forma de hacerlo en numpy y posteriormente en dataframes de pandas.

Conjunto de datos de ejemplo

A la hora de cargar cualquier conjunto de datos es habitual encontrar que ciertas columnas o filas contengan valores nulos. Para ver como se pueden procesar estos lo primero que se ha hacer crear una matriz:

data = np.array([[1, 2, 3], 
                 [4, 5, 6], 
                 [7, 8, 9], 
                 [np.nan, 1, 2], 
                 [3, 4, 5]])

Como se puede ver se ha creado una matriz con tres filas y cinco columnas. La cuarta fila de la primera columna contiene un valor nulo.

Eliminación en numpy

Para identificar los elementos nulos se puede utilizar isnan. Con lo que obstine una matriz en la que se indica las posiciones en la que se encuentran los elementos.

np.isnan(data)
array([[False, False, False],
       [False, False, False],
       [False, False, False],
       [ True, False, False],
       [False, False, False]])

Para obtener las filas en las que existe por lo menos un elemento nulo se puede utilizar any(axis=1) sobre la matriz anterior.

np.isnan(data).any(axis=1)
array([False, False, False, True, False])

Ahora, simplemente se ha de seleccionar las filas que no contengan ningún elemento nulo.

data[~np.isnan(data).any(axis=1)]
array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.], [3., 4., 5.]])

La eliminación también se puede realizar por columnas. Para ello se ha de indicar a la función any que trabaje por columnas

data[~np.isnan(data).any(axis=0)]
array([[2., 3.], [5., 6.], [8., 9.], [1., 2.], [4., 5.]])

Eliminación en pandas

En pandas la eliminación de las filas o columnas con nulos es más fácil. Para ello existe el método dropna en los dataframe. Para continuar lo primero que hay que hacer es convertir la matriz en un dataframe.

df = pd.DataFrame(data, columns=['feature_1', 'feature_2', 'feature_2'])

Ahora, para eliminar las filas con nulos simplemente se utiliza el método.

df.dropna()
	feature_1	feature_2	feature_2
0	1.0		2.0		3.0
1	4.0		5.0		6.0
2	7.0		8.0		9.0
4	3.0		4.0		5.0

Alternativamente, para eliminar las columnas se ha de indicar a dropna que use este eje.

df.dropna(1)
	feature_2	feature_2
0	2.0		3.0
1	5.0		6.0
2	8.0		9.0
3	1.0		2.0
4	4.0		5.0

Conclusiones

En esta entrada explicado como eliminar las filas o columnas con valores nulos en Python. En primer lugar, se ha explicado cómo hacer esto con numpy. Posteriormente se ha explicado la forma para cuando se trabaja con objetos dataframe en pandas.