Como tratar valores faltantes con pandas en Python
Los datos del mundo real casi nunca llegan completos: falta un precio aqui, una fecha alla, una celda vacia mas adelante. Tratar valores faltantes con pandas en Python es una de las habilidades mas utiles para quien trabaja con datos, porque casi todos los analisis enganan o fallan cuando hay valores NaN de por medio. A continuacion veras, con ejemplos simples, como detectar, eliminar y rellenar esos valores faltantes en pocas lineas de codigo.
Requisitos previos
- Python 3 instalado en tu ordenador.
- La biblioteca pandas instalada (
pip install pandas). - Saber que es un
DataFrame: una tabla de filas y columnas en pandas. - Un editor o notebook a tu eleccion, por ejemplo VS Code o Jupyter.
Paso 1: Crear un DataFrame de ejemplo
Para practicar sin depender de un archivo, empieza por crear una pequena tabla con algunos valores faltantes. En pandas, un valor faltante aparece como NaN (del ingles Not a Number). Puedes crearlo con None o con np.nan.

import pandas as pd
import numpy as np
dados = {
"nome": ["Ana", "Bruno", "Carla", "Diogo"],
"idade": [28, np.nan, 35, 41],
"cidade": ["Lisboa", "Porto", None, "Braga"],
}
df = pd.DataFrame(dados)
print(df)
Fijate en que la edad de Bruno y la ciudad de Carla estan vacias. Es exactamente este tipo de hueco el que vamos a aprender a resolver.
Paso 2: Detectar los valores faltantes
Antes de decidir que hacer, conviene saber cuantos valores faltan y en que columnas. El metodo isna() devuelve True en cada celda vacia (el metodo isnull() hace exactamente lo mismo). Si anades sum(), obtienes el conteo por columna.
# True/False para cada celula
print(df.isna())
# Contagem de valores em falta por coluna
print(df.isna().sum())
El resultado muestra 1 en la columna idade y 1 en la columna cidade. Ahora ya conoces el tamano del problema y puedes elegir la estrategia adecuada.
Paso 3: Eliminar filas con valores faltantes
La forma mas directa es borrar las filas incompletas con dropna(). Es rapido, pero tiene un riesgo: si tienes pocos datos, puedes tirar informacion valiosa.
# Remove qualquer linha com pelo menos um valor em falta
df_sem_falta = df.dropna()
# Remove apenas quando a idade esta em falta
df_com_idade = df.dropna(subset=["idade"])
Usa el parametro subset cuando solo una columna es realmente critica. Asi conservas las demas filas en lugar de perderlas todas.
Paso 4: Rellenar los valores faltantes
Muchas veces es mejor rellenar que borrar. El metodo fillna() sustituye los NaN por un valor que elijas. Ten en cuenta que, en pandas, debes reasignar el resultado a la columna para que el cambio quede guardado.
# Preencher a cidade em falta com um texto
df["cidade"] = df["cidade"].fillna("Desconhecida")
# Preencher a idade com a media das idades existentes
media_idade = df["idade"].mean()
df["idade"] = df["idade"].fillna(media_idade)
Para datos ordenados en el tiempo, como una serie de ventas diarias, tiene mas sentido repetir el ultimo valor conocido que usar un promedio. En ese caso, usa ffill() (rellena hacia delante) o bfill() (hacia atras). Son estrategias alternativas: elige una:
# Repete o ultimo valor valido para baixo
df["idade"] = df["idade"].ffill()
Consejo: rellenar con el promedio es simple, pero la mediana (median()) suele ser mas robusta cuando hay valores muy extremos.
Verificar el resultado
Despues de limpiar los datos, confirma que no queda ningun valor faltante. Si todo salio bien, el conteo debe ser 0 en todas las columnas.
print(df.isna().sum())
print(df)
Si todavia aparece un numero mayor que cero, revisa dos cosas: si aplicaste el relleno a la columna correcta y si reasignaste el resultado, como en df["col"] = df["col"].fillna(...). Es el error mas comun de quien empieza.
Conclusion
Ya dominas lo esencial para tratar valores faltantes con pandas: detectar con isna(), eliminar con dropna() y rellenar con fillna(), ffill() o bfill(). El siguiente paso es decidir la estrategia caso por caso, porque borrar no siempre es la mejor opcion y el promedio no siempre es el valor correcto. Mirando tus propios datos, cual de estos enfoques tiene mas sentido?