La existencia de valores NaN es un conjunto de datos puede ser una molestia ya que no es posible realizar muchas operaciones con ellos. Por eso conocer un método para reemplazar los valores NaN en los DataFrame por cualquier otro puede solucionar algunos problemas. Afortunadamente para ello existe el método fillna()
en Pandas, con el que se puede reemplazar todas las apariciones de valores NaN por el que se indique.
Conjunto de datos con valores NaN
Para poder ver como es el funcionamiento del método fillna()
lo mejor es crear un conjunto de datos aleatorio y reemplazar algunos de sus valores por NaN. Valores que se pueden generar con la función rand()
de NumPy. Reemplazado posteriormente un 20% de los valores por NaN, todos aquellos que sean mayores de 0,8. Siendo esto lo que se hace con el siguiente código
import pandas as pd import numpy as np np.random.seed(0) df = pd.DataFrame(np.random.rand(6, 4)) df[df > 0.8] = np.NAN df
0 1 2 3 0 0.548814 0.715189 0.602763 0.544883 1 0.423655 0.645894 0.437587 NaN 2 NaN 0.383442 0.791725 0.528895 3 0.568045 NaN 0.071036 0.087129 4 0.020218 NaN 0.778157 NaN 5 NaN 0.799159 0.461479 0.780529
Ahora, para reemplazar los valores NaN del DataFrame se tiene que usar el método fillna()
, indicando como parámetro el valor que se desea reemplazar. Por ejemplo, 1.
df.fillna(1)
0 1 2 3 0 0.548814 0.715189 0.602763 0.544883 1 0.423655 0.645894 0.437587 1.000000 2 1.000000 0.383442 0.791725 0.528895 3 0.568045 1.000000 0.071036 0.087129 4 0.020218 1.000000 0.778157 1.000000 5 1.000000 0.799159 0.461479 0.780529
Reemplazar los valores en el propio DataFrame
En el caso de trabajar con grandes conjuntos de datos es importante tener en cuenta que fillna()
genera una copia del objeto original. Por lo que después de llamar al método se dispondrá de dos objetos en la memoria, lo que puede afectar al rendimiento. Al igual que la mayoría de los métodos que modifican el contenido de los DataFrame, fillna()
cuenta con la propiedad inplace
mediante la cual se pueden indicar que los cambios se realizan en el propio objeto y no se cree una copia.
df.fillna(0, inplace=True) df
0 1 2 3 0 0.548814 0.715189 0.602763 0.544883 1 0.423655 0.645894 0.437587 0.000000 2 0.000000 0.383442 0.791725 0.528895 3 0.568045 0.000000 0.071036 0.087129 4 0.020218 0.000000 0.778157 0.000000 5 0.000000 0.799159 0.461479 0.780529
Conclusiones
En esta ocasión se ha visto un método de Pandas con el que se pueden reemplazar los valores NaN en los DataFrame. Un método sencillo pero que aun así facilita una operación suele ser necesario realizar de forma habitual.
Imagen de Theodor Moise en Pixabay