Controlla se NaN esiste in Pandas DataFrame

Suraj Joshi 30 gennaio 2023
  1. Metodo pandas.DataFrame.isnull()
  2. Metodo pandas.DataFrame.isna()
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.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Articolo correlato - Pandas NaN