
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