Controlla se NaN esiste in Pandas DataFrame
NaN sta per Not a Number che rappresenta i valori mancanti in Pandas. Per rilevare i valori NaN in Python Pandas possiamo usare i metodi isnull() e isna() per gli oggetti DataFrame.
Metodo pandas.DataFrame.isnull()
Possiamo controllare i valori NaN in DataFrame utilizzando il metodo pandas.DataFrame.isnull(). Il metodo restituisce DataFrame di valori bool i cui elementi sono True se gli elementi corrispondenti in DataFrame da controllare hanno valore NaN e gli elementi sono False in caso contrario.
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)
Produzione:
Student Height Weight
0 False False True
1 False False False
2 False True False
3 False True True
4 False False False
Qui, i valori False nell’output rappresentano le voci in DataFrame df non sono NaN e i valori True rappresentano le voci NaN nel DataFrame df.
Se vogliamo sapere se c’è un valore NaN nel DataFrame, possiamo usare il metodo isnull().values.any() che restituisce True se c’è un valore NaN nel DataFrame e restituisce False se non c’è nemmeno una singola voce NaN nel 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)
Produzione:
True
df.isnull().values restituisce la rappresentazione NumPy del dataframe. numpy.any() restituisce True se uno qualsiasi degli elementi viene valutato come True.
Pertanto, df.isnull().values.any() è True se esiste un NaN nel dataframe.
df.isnull().any().any() per verificare se esiste qualche NaN
df.any() restituisce se uno qualsiasi degli elementi è True. Restituisce un pd.Series quando df è un dataframe e un valore booleano quando 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)
Produzione:
True
Due metodi any() a cascata dopo isnull() nell’esempio precedente restituiscono True se qualsiasi elemento è NaN nel dataframe.
isnull().sum().sum() per verificare se esiste qualche NaN
Se vogliamo contare il numero totale di valori NaN nel particolare DataFrame, il metodo df.isnull().sum().sum() è la soluzione giusta. Il metodo restituisce il numero totale di valori NaN nell’intero 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)
Produzione:
4
Se il risultato è maggiore di 0, significa che NaN esiste nel dataframe.
Metodo pandas.DataFrame.isna()
Il metodo pandas.DataFrame.isna() è simile a
pandas.DataFrame.isnull(). Non c’è alcuna differenza tra il funzionamento di due metodi. Differiscono solo nel 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))
Produzione:
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
Qui il metodo df.isna() restituisce DataFrame le cui voci contengono valori booleani che denotano la presenza di valori NaN in df. Allo stesso modo, df.isna().values.any(), df.isna().any().any() e df.isna().sum().sum() restituiscono la presenza di Valore NaN nell’intero df e numero di voci NaN in df.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn