Como Verificar se o NaN Existe em Pandas DataFrame
NaN
significa Not a Number
que representa valores ausentes em Pandas. Para detectar valores NaN em Python Pandas, podemos utilizar métodos isnull()
e isna()
para objetos DataFrame.
pandas.DataFrame.isull()
Método
Podemos verificar os valores NaN
em DataFrame
utilizando o método pandas.DataFrame.isull()
. O método retorna DataFrame
de valores bool cujos elementos são Verdadeiros se os elementos correspondentes em DataFrame a serem verificados tiverem valor NaN
, e os elementos são Falsos de outra forma.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
df_check = df.isnull()
print(df_check)
Resultado:
Student Height Weight
0 False False True
1 False False False
2 False True False
3 False True True
4 False False False
Aqui, os valores False
na saída representam as entradas no DataFrame df
não são NaN
e os valores True
representam as entradas NaN
no DataFrame df
.
Se quisermos saber se há algum valor NaN
no DataFrame, podemos utilizar o método isnull().values.any()
que retorna True se houver algum valor NaN
no DataFrame e retorna False
se não houver sequer uma única entrada NaN
no DataFrame.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
check_for_nan = df.isnull().values.any()
print(check_for_nan)
Resultado:
True
df.isull().values
retorna a representação NumPy do DataFrame. numpy.any()
retorna True
se qualquer um dos elementos for avaliado como True
.
Portanto, df.isull().values.any()
é True
se algum elemento NaN
existir no dataframe.
df.isull().any().any()
para verificar se existe algum NaN
df.any()
devolve se algum dos elementos é Verdadeiro. Ele retorna um pd.Series
quando o df
é um quadro de dados, e um valor booleano quando o df
é pd.Series
.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
check_for_nan = df.isnull().any().any()
print(check_for_nan)
Resultado:
True
Dois métodos em cascata any()
depois de isnull()
no exemplo acima retorna True
se algum elemento é NaN
no dataframe.
isnull().sum().sum()
para verificar se algum elemento NaN
existe
Se desejarmos contar o número total de valores NaN
no particular DataFrame
, df.isull().sum().sum()
o método é a solução certa. O método retorna o número total de valores NaN
em todo o DataFrame.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
total_nan_values = df.isnull().sum().sum()
print(total_nan_values)
Resultado:
4
Se o resultado for maior que 0, isso significa que NaN
existe no DataFrame.
pandas.DataFrame.isna()
Método
O método pandas.DataFrame.isna()
é similar ao
pandas.DataFrame.isull()
. Não há nenhuma diferença entre o funcionamento de dois métodos. Eles diferem apenas no nome.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
df_check = df.isna()
check_for_any_nan = df.isna().values.any()
# Or
check_for_any_nan = df.isna().any().any()
total_nan_values = df.isna().sum().sum()
print(df_check)
print("NaN Presence:" + str(check_for_any_nan))
print("Total Number of NaN values:" + str(total_nan_values))
Resultado:
Student Height Weight
0 False False True
1 False False False
2 False True False
3 False True True
4 False False False
NaN Presence:True
Total Number of NaN values:4
Aqui o método df.isna()
retorna DataFrame cujas entradas contêm valores booleanos denotando a presença de valores NaN
em df
. Da mesma forma, df.isna().values.any()
, df.isna().any().any()
e df.isna().sum().sum()
retorna a presença do valor NaN
em todo o df
e o número de entradas NaN
no df
.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn