Revista Informática

Truco: reemplazar los valores NaN en los DataFrame Pandas

Publicado el 30 mayo 2022 por Daniel Rodríguez @analyticslane
Truco: reemplazar los valores NaN en los DataFrame Pandas

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


Volver a la Portada de Logo Paperblog