Python

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

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: PandasTruco

Recent Posts

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

23 horas ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

2 días ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

6 días ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

1 semana ago

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…

2 semanas ago

WOE e IV: La Base Matemática del Credit Scoring

Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…

2 semanas ago

This website uses cookies.