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
.