Skip to content

pandas: Rilevare e contare i valori mancanti (NaN) con isnull(), isna()

Python

Questo articolo descrive come verificare se pandas.DataFrame e Series contengono valori mancanti e contare il numero di valori mancanti e non mancanti.

  • Rileva i valori mancanti con isnull() e isna()
  • Controlla se a tutti gli elementi di una riga e di una colonna mancano i valori
  • Verifica se una riga e una colonna contiene almeno un valore mancante
  • Conta i valori mancanti in ogni riga e colonna
  • Conta i valori non mancanti in ogni riga e colonna
  • Conta il numero totale di valori mancanti
  • Contare il numero totale di valori non mancanti
  • Controlla se pandas.DataFrame contiene almeno un valore mancante
  • Per panda.Serie

Vedere gli articoli seguenti su come rimuovere e sostituire i valori mancanti.

Vedere gli articoli seguenti su come contare gli elementi che soddisfano determinate condizioni, non solo NaN.

Nota che non solo NaN (Not a Number) ma anche None viene trattato come un valore mancante nei panda.

Ad esempio, leggi un file CSV con valori mancanti con read_csv(). Usa solo le prime tre righe.

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal_nan.csv')[:3]
print(df)
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN

Rileva i valori mancanti con isnull() e isna()

pandas.DataFrame e Series hanno metodi isnull() e isna(). Esempi di pandas.Series sono mostrati alla fine. Si noti che il metodo isnan() non è fornito.

Vero per valori mancanti, Falso per valori non mancanti:

print(df.isnull())
#     name    age  state  point  other
# 0  False  False  False   True   True
# 1   True   True   True   True   True
# 2  False   True  False   True   True

print(df.isna())
#     name    age  state  point  other
# 0  False  False  False   True   True
# 1   True   True   True   True   True
# 2  False   True  False   True   True

isnull() è un alias per isna(), il cui utilizzo è lo stesso. isnull() viene utilizzato principalmente in questo articolo, ma puoi sostituirlo con isna().

Vengono forniti anche notnull() e notna(), che restituiscono True se il valore non è mancante e False se il valore è mancante. notnull() è un alias per notna()

print(df.notnull())
#     name    age  state  point  other
# 0   True   True   True  False  False
# 1  False  False  False  False  False
# 2   True  False   True  False  False

print(df.notna())
#     name    age  state  point  other
# 0   True   True   True  False  False
# 1  False  False  False  False  False
# 2   True  False   True  False  False

Si noti che NaN restituisce sempre False per == e True per !=.

print(df == float('nan'))
#     name    age  state  point  other
# 0  False  False  False  False  False
# 1  False  False  False  False  False
# 2  False  False  False  False  False

print(df != float('nan'))
#    name   age  state  point  other
# 0  True  True   True   True   True
# 1  True  True   True   True   True
# 2  True  True   True   True   True

Controlla se a tutti gli elementi di una riga e di una colonna mancano i valori

all() restituisce True se tutti gli elementi in ogni riga e colonna sono True.

Chiamando all() dal risultato di isnull(), puoi verificare se tutti gli elementi in ogni riga e colonna sono valori mancanti.

Per impostazione predefinita, viene applicato alle colonne. Se l’argomento asse=1, viene applicato alle righe.

print(df.isnull().all())
# name     False
# age      False
# state    False
# point     True
# other     True
# dtype: bool

print(df.isnull().all(axis=1))
# 0    False
# 1     True
# 2    False
# dtype: bool

Verifica se una riga e una colonna contiene almeno un valore mancante

any() restituisce True se c’è almeno un True in ogni riga e colonna.

Chiamando any() dal risultato di isnull(), puoi verificare se ogni riga e colonna contiene almeno un valore mancante.

Per impostazione predefinita, viene applicato alle colonne. Se l’argomento asse=1, viene applicato alle righe.

print(df.isnull().any())
# name     True
# age      True
# state    True
# point    True
# other    True
# dtype: bool

print(df.isnull().any(axis=1))
# 0    True
# 1    True
# 2    True
# dtype: bool

Conta i valori mancanti in ogni riga e colonna

sum() calcola la somma degli elementi per ogni riga e colonna.

Poiché sum() calcola come True=1 e False=0, puoi contare il numero di valori mancanti in ogni riga e colonna chiamando sum() dal risultato di isnull().

Puoi contare i valori mancanti in ogni colonna per la dotazione predefinita e in ogni riga con asse=1.

print(df.isnull().sum())
# name     1
# age      2
# state    1
# point    3
# other    3
# dtype: int64

print(df.isnull().sum(axis=1))
# 0    2
# 1    5
# 2    3
# dtype: int64

Conta i valori non mancanti in ogni riga e colonna

count() conta il numero di valori non mancanti (= valori esistenti) in ogni riga e colonna.

Chiamalo direttamente dal pandas.DataFrame originale, non dal risultato di isnull().

Puoi contare i valori non mancanti in ogni colonna per dotazione predefinita e in ogni riga con asse=1.

print(df.count())
# name     2
# age      1
# state    2
# point    0
# other    0
# dtype: int64

print(df.count(axis=1))
# 0    3
# 1    0
# 2    2
# dtype: int64

Conta il numero totale di valori mancanti

Puoi ottenere tutti i dati come un array NumPy numpy.ndarray con l’attributo values ​​di pandas.DataFrame.

print(df.isnull().values)
# [[False False False  True  True]
#  [ True  True  True  True  True]
#  [False  True False  True  True]]

print(type(df.isnull().values))
# <class 'numpy.ndarray'>

A differenza di pandas.DataFrame, sum() di numpy.ndarray calcola la somma di tutti gli elementi per la stima predefinita.

Pertanto, chiamando sum() dall’attributo values ​​(numpy.ndarray) del di isnull(), puoi ottenere il numero totale di valori mancanti.

print(df.isnull().values.sum())
# 10

Contare il numero totale di valori non mancanti

Puoi ottenere il numero totale di elementi non mancanti sommando il numero di ogni riga e colonna ottenuto da count() con sum().

print(df.count().sum())
# 5

Puoi anche chiamare sum() dall’attributo values ​​(numpy.ndarray) del risultato di notnull() o notna() (dove l’elemento non mancante è True).

print(df.notnull().values.sum())
# 5

Controlla se pandas.DataFrame contiene almeno un valore mancante

Utilizzando il numero totale di valori mancanti mostrato sopra, puoi verificare se pandas.DataFrame contiene almeno un valore mancante.

Se il numero totale di valori mancanti non è zero, significa che pandas.DataFrame contiene almeno un valore mancante.

print(df.isnull().values.sum() != 0)
# True

Se il numero totale di valori mancanti è uguale all’attributo size (il numero di tutti gli elementi), significa che tutti gli elementi sono valori mancanti.

print(df.size)
# 15

print(df.isnull().values.sum() == df.size)
# False

Per panda.Serie

pandas.Series ha anche metodi come isnull(), isna(), notnull() e notna(). Può essere gestito allo stesso modo degli esempi precedenti di pandas.DataFrame.

s = df['state']
print(s)
# 0     NY
# 1    NaN
# 2     CA
# Name: state, dtype: object

print(s.isnull())
# 0    False
# 1     True
# 2    False
# Name: state, dtype: bool

print(s.notnull())
# 0     True
# 1    False
# 2     True
# Name: state, dtype: bool

print(s.isnull().any())
# True

print(s.isnull().all())
# False

print(s.isnull().sum())
# 1

print(s.count())
# 2