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