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

Cómo Elegir el Test de Hipótesis Correcto para tus Datos

Tienes dos grupos de datos y quieres saber si son estadísticamente distintos. O tienes una…

1 día ago

Tuplas vs Listas en Python: parecen lo mismo, pero no

A primera vista, tuplas y listas son casi idénticas. Ambas guardan colecciones ordenadas de elementos.…

3 días ago

Qué significa realmente “calidad de datos”

"Nuestros datos no tienen buena calidad." Escuchas esto constantemente en reuniones. El problema es que…

1 semana ago

Cómo Detectar Pseudo-IDs y Data Leakage en el Constructor de Scorecards

El artículo Data Leakage en Credit Scoring explicó por qué este es el error más…

1 semana ago

Cómo Verificar la Normalidad de tus Datos antes de un Test Estadístico

Antes de aplicar muchos tests estadísticos clásicos (el t-test, el ANOVA, la regresión lineal) aparece…

2 semanas ago

Docker Compose: el día a día. Cómo ver qué funciona y qué no

Si acabas de montar tu aplicación en Docker Compose, la primera pregunta que haces cada…

2 semanas ago

This website uses cookies.