HOWTO · Pandas
Comprobar si una celda está vacía en Pandas
Este tutorial explica cómo comprobar si una celda de un DataFrame de Pandas está vacía.
En esta página
Las comprobaciones de Pandas identifican los valores que la biblioteca reconoce como ausentes. No consideran ausente cualquier valor que parezca vacío: NaN, None y NaT son ejemplos de representaciones de valores ausentes, mientras que una cadena vacía ("") es una cadena normal, salvo que la conviertas explícitamente. Esta distinción importa cuando los datos importados usan texto en blanco para representar información que falta.
Entender qué considera Pandas un valor ausente
Usa isna() o su alias isnull() para crear una máscara booleana: True marca un valor ausente reconocido y False marca un valor presente. La misma operación funciona con un escalar, una Serie (una columna) o un DataFrame. La máscara conserva la forma y las etiquetas del objeto que comprueba.
Los ejemplos siguientes usan None para crear valores ausentes. La evidencia de ejecución suministrada incluye los resultados de los cuatro ejemplos ejecutables en Python.
Comprobar una celda o una columna con isna() o isnull()
Ejecuta este ejemplo. El código y las etiquetas o salidas visibles se conservan en inglés.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
df = pd.DataFrame({"name": ["Ari", "Bo", "Cy"], "score": [8, None, 6]}, index=[10, 11, 12])
cell_missing = pd.isna(df.loc[11, "score"])
column_mask = df["score"].isna()
print(cell_missing)
print(column_mask.tolist())
loc selecciona mediante las etiquetas de fila y columna, así que df.loc[11, "score"] comprueba la celda cuya etiqueta de fila es 11. Para seleccionar por posición, usa iloc; por ejemplo, df.iloc[1, 1]. La etiqueta de fila y la posición de fila pueden ser distintas si el DataFrame tiene un índice personalizado. isna() y isnull() son alias equivalentes; elige uno y úsalo de forma coherente. La documentación de isnull() de Pandas describe la misma comprobación de valores ausentes.
Para una columna completa, df["score"].isna() devuelve un valor booleano por fila. Para un DataFrame completo, df.isna() devuelve un DataFrame booleano con las mismas etiquetas de fila y columna. Usa estas máscaras para inspeccionar los resultados o seleccionar las filas que coincidan, por ejemplo, df.loc[df["score"].isna()].
Comprobar si existe algún valor ausente con any()
Aplica any() a la máscara de una columna para obtener una respuesta booleana para esa columna. En un DataFrame, df.isna().any() devuelve una Serie booleana con un resultado por columna. Reduce esa Serie con otra llamada a any() para comprobar si alguna columna contiene un valor ausente. El código y las etiquetas o salidas visibles se conservan en inglés.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
df = pd.DataFrame({"name": ["Ari", "Bo", "Cy"], "score": [8, None, 6]})
missing_by_column = df.isna().any()
missing_anywhere = missing_by_column.any()
print(missing_by_column.to_dict())
print(missing_anywhere)
La función any() de Python devuelve verdadero cuando al menos un elemento es verdadero. Al aplicarla una vez a la máscara de un DataFrame, obtienes el resultado de cada columna; al aplicarla de nuevo a ese resultado, obtienes una única respuesta para todo el DataFrame.
Contar los valores ausentes con sum()
Al sumar valores booleanos, True cuenta como 1 y False como 0; por eso, sumar una máscara de valores ausentes da un recuento. Suma la máscara de una Serie para contar los valores de una columna o la máscara de un DataFrame para obtener recuentos por columna. Añade una segunda suma para obtener el total de todas las celdas. El código y las etiquetas o salidas visibles se conservan en inglés.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
df = pd.DataFrame({"name": ["Ari", "Bo", "Cy"], "score": [8, None, 6]})
counts_by_column = df.isna().sum()
total_missing = counts_by_column.sum()
print(counts_by_column.to_dict())
print(total_missing)
Esto cuenta únicamente los valores que Pandas reconoce como ausentes. Si las cadenas vacías de una columna importada también deben contar, normalízalas primero (por ejemplo, reemplaza "" por None) y después crea la máscara.
Encontrar las etiquetas de fila de los valores ausentes
Usa la máscara booleana para seleccionar el índice de la Serie allí donde falte un valor. Los valores devueltos son etiquetas de fila, no posiciones de fila. El código y las etiquetas o salidas visibles se conservan en inglés.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
df = pd.DataFrame({"score": [8, None, 6, None]}, index=[10, 11, 12, 13])
missing_row_labels = df.index[df["score"].isna()].tolist()
print(missing_row_labels)
Para datos generales de Pandas, este enfoque basado en máscaras maneja las representaciones de valores ausentes que reconoce Pandas. numpy.isnan tiene un alcance más limitado: comprueba valores NaN en datos numéricos compatibles y puede no aceptar valores como None o NaT. Prefiere isna() cuando los valores de la columna pueden usar distintas representaciones de valores ausentes. Usa numpy.isnan solo si el tipo de datos y los valores son adecuados para esa función.