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