En Python Pandas, ¿cuál es la mejor manera de verificar si un DataFrame tiene uno (o más) valores NaN?
Sé acerca de la función pd.isnan
, pero esto devuelve un DataFrame de booleanos para cada elemento. Esta publicación aquí tampoco responde exactamente a mi pregunta.
Respuestas:
La respuesta de jwilner es acertada . Estaba explorando para ver si hay una opción más rápida, ya que en mi experiencia, sumar matrices planas es (extrañamente) más rápido que contar. Este código parece más rápido:
Por ejemplo:
df.isnull().sum().sum()
es un poco más lento, pero por supuesto, tiene información adicional: la cantidad deNaNs
.fuente
pandas
no tenga una función incorporada para esto. Es cierto de la publicación de @ JGreenwell quedf.describe()
puede hacer esto, pero no tiene una función directa.df.describe()
(sin encontrarNaN
s). Con una matriz de 1000 x 1000, una sola llamada toma 1.15 segundos.df.isnull().values.sum()
es un poco más rápido quedf.isnull().values.flatten().sum()
.flatten()
para publicar. Gracias.df.isnull().values.any()
, para mí es más rápido que los demás.Tienes unas cuantas opciones.
Ahora el marco de datos se ve así:
df.isnull().any().any()
- Esto devuelve un valor booleanoUsted sabe
isnull()
cuál devolvería un marco de datos como este:Si lo hace
df.isnull().any()
, puede encontrar solo las columnas que tienenNaN
valores:Uno más
.any()
le dirá si alguno de los anteriores sonTrue
df.isnull().sum().sum()
- Esto devuelve un entero del número total deNaN
valores:Esto funciona de la misma manera que lo
.any().any()
hace, dando primero una suma del número deNaN
valores en una columna, luego la suma de esos valores:Finalmente, para obtener el número total de valores de NaN en el DataFrame:
fuente
.any(axis=None)
lugar de.any().any()
?Para averiguar qué filas tienen NaN en una columna específica:
fuente
non_nan_rows = df[df['name column'].notnull()]
.Si necesita saber cuántas filas hay con "una o más
NaN
s":O si necesita extraer estas filas y examinarlas:
fuente
df.isnull().any().any()
Deberías hacerlo.fuente
Agregando a Hobs una respuesta brillante, soy muy nuevo en Python y Pandas, así que por favor señale si estoy equivocado.
Para averiguar qué filas tienen NaN:
realizaría la misma operación sin la necesidad de transposición especificando el eje de any () como 1 para verificar si 'True' está presente en las filas.
fuente
any(axis=1)
simplificación concisa .Sintaxis Súper Simple:
df.isna().any(axis=None)
A partir de v0.23.2 , puede usar
DataFrame.isna
+DataFrame.any(axis=None)
dondeaxis=None
especifica la reducción lógica en todo el DataFrame.Alternativas utiles
numpy.isnan
Otra opción eficaz si está ejecutando versiones anteriores de pandas.
Alternativamente, verifique la suma:
Series.hasnans
También puedes llamar de forma iterativa
Series.hasnans
. Por ejemplo, para verificar si una sola columna tiene NaNs,Y para verificar si alguna columna tiene NaN, puede usar una comprensión con
any
(que es una operación de cortocircuito).Esto es realmente muy rápido.
fuente
Como ninguno ha mencionado, solo hay otra variable llamada
hasnans
.df[i].hasnans
saldrá aTrue
si uno o más de los valores en la serie de pandas es NaN,False
si no. Tenga en cuenta que no es una función.versión pandas '0.19.2' y '0.20.2'
fuente
df = DataFrame([1,None], columns=['foo'])
, entoncesdf.hasnans
arrojará unAttributeError
, perodf.foo.hasnans
regresaráTrue
.Como
pandas
tiene que descubrir estoDataFrame.dropna()
, eché un vistazo para ver cómo lo implementan y descubrí que hicieron uso deDataFrame.count()
, que cuenta todos los valores no nulos en elDataFrame
. Cf. Código fuente de pandas . No he comparado esta técnica, pero creo que es probable que los autores de la biblioteca hayan tomado una decisión acertada sobre cómo hacerlo.fuente
deje que
df
sea el nombre del Pandas DataFrame y cualquier valor quenumpy.nan
sea un valor nulo.Si desea ver el porcentaje de nulos en cada columna
df.loc[:,list(df.loc[:,df.isnull().any()].columns)].isnull().sum()/(len(df))*100
EDITAR 1:
Si desea ver dónde faltan visualmente sus datos:
fuente
df.isna().sum()
?Simplemente usando math.isnan (x) , Devuelve True si x es un NaN (no un número) y False de lo contrario.
fuente
math.isnan(x)
que vaya a funcionar cuando sex
trata de un DataFrame. En su lugar, obtienes un TypeError.Esto le dará un recuento de todos los valores de NaN presentes en las columnas respectivas del DataFrame.
fuente
Aquí hay otra forma interesante de encontrar nulo y reemplazarlo con un valor calculado
fuente
He estado usando lo siguiente y escribí convertirlo en una cadena y verificar el valor nan
Esto me permite verificar un valor específico en una serie y no solo regresar si está contenido en algún lugar dentro de la serie.
fuente
pandas.isna()
?Lo mejor sería usar:
Aquí es por qué . Por
isna()
lo tanto, se utiliza para definirisnull()
, pero ambos son idénticos, por supuesto.Esto es incluso más rápido que la respuesta aceptada y cubre todas las matrices de panda 2D.
fuente
O puede usar
.info()
enDF
:df.info(null_counts=True)
que devuelve el número de filas no nulas en columnas como:fuente
fuente
Verificará para cada columna si contiene Nan o no.
fuente
Podemos ver los valores nulos presentes en el conjunto de datos generando mapa de calor usando el mapa de calor del módulo marino
fuente
No solo puede verificar si existe 'NaN', sino también obtener el porcentaje de 'NaN' en cada columna utilizando lo siguiente,
fuente
Dependiendo del tipo de datos con los que esté tratando, también podría obtener los recuentos de valores de cada columna mientras realiza su EDA configurando dropna en False.
Funciona bien para variables categóricas, no tanto cuando tiene muchos valores únicos.
fuente