
Puoi estrarre righe/colonne contenenti valori mancanti da pandas.DataFrame utilizzando il metodo isnull() o isna() che controlla se un elemento è un valore mancante.
In questo articolo vengono descritti i seguenti contenuti.
- Estrai righe/colonne con valori mancanti in colonne/righe specifiche
- Estrarre righe/colonne con almeno un valore mancante
Utilizzare il metodo dropna() per estrarre righe/colonne in cui tutti gli elementi sono valori non mancanti, ovvero rimuovere righe/colonne contenenti valori mancanti. Vedere il seguente articolo per i dettagli.
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().
import pandas as pd
df = pd.read_csv('data/src/sample_pandas_normal_nan.csv')
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
# 3 Dave 68.0 TX 70.0 NaN
# 4 Ellen NaN CA 88.0 NaN
# 5 Frank 30.0 NaN NaN NaN
Estrai righe/colonne con valori mancanti in colonne/righe specifiche
È possibile utilizzare il metodo isnull() o isna() di pandas.DataFrame e Series per verificare se ogni elemento è un valore mancante o meno.
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
# 3 False False False False True
# 4 False True False False True
# 5 False False True True True
isnull() è un alias per isna(), il cui utilizzo è lo stesso. In questo articolo viene utilizzato principalmente isnull(), ma puoi sostituirlo con isna().
Se vuoi estrarre righe con valori mancanti in una colonna specifica, usa il risultato di isnull() per quella colonna.
print(df['point'].isnull())
# 0 True
# 1 True
# 2 True
# 3 False
# 4 False
# 5 True
# Name: point, dtype: bool
print(df[df['point'].isnull()])
# name age state point other
# 0 Alice 24.0 NY NaN NaN
# 1 NaN NaN NaN NaN NaN
# 2 Charlie NaN CA NaN NaN
# 5 Frank 30.0 NaN NaN NaN
Il concetto è lo stesso quando si estraggono colonne con valori mancanti in una riga specifica. Usa loc[] per selezionare per nome (etichetta) e iloc[] per selezionare per posizione.
print(df.iloc[2].isnull())
# name False
# age True
# state False
# point True
# other True
# Name: 2, dtype: bool
print(df.loc[:, df.iloc[2].isnull()])
# age point other
# 0 24.0 NaN NaN
# 1 NaN NaN NaN
# 2 NaN NaN NaN
# 3 68.0 70.0 NaN
# 4 NaN 88.0 NaN
# 5 30.0 NaN NaN
Estrarre righe/colonne con almeno un valore mancante
Per utilizzare come esempio, rimuovere righe e colonne in cui tutti i valori sono mancanti.
df2 = df.dropna(how='all').dropna(how='all', axis=1)
print(df2)
# name age state point
# 0 Alice 24.0 NY NaN
# 2 Charlie NaN CA NaN
# 3 Dave 68.0 TX 70.0
# 4 Ellen NaN CA 88.0
# 5 Frank 30.0 NaN NaN
Usa il metodo any() che restituisce True se è presente almeno un True in ogni riga/colonna. Per impostazione predefinita, viene applicato alle colonne. Se asse=1, viene applicato alle righe.
Chiamando any() dal risultato di isnull(), puoi verificare se ogni riga e colonna contiene almeno un valore mancante.
Estrarre le righe che contengono almeno un valore mancante
print(df2.isnull())
# name age state point
# 0 False False False True
# 2 False True False True
# 3 False False False False
# 4 False True False False
# 5 False False True True
print(df2.isnull().any(axis=1))
# 0 True
# 2 True
# 3 False
# 4 True
# 5 True
# dtype: bool
print(df2[df2.isnull().any(axis=1)])
# name age state point
# 0 Alice 24.0 NY NaN
# 2 Charlie NaN CA NaN
# 4 Ellen NaN CA 88.0
# 5 Frank 30.0 NaN NaN
Estrarre le colonne che contengono almeno un valore mancante
print(df2.isnull().any())
# name False
# age True
# state True
# point True
# dtype: bool
print(df2.loc[:, df2.isnull().any()])
# age state point
# 0 24.0 NY NaN
# 2 NaN CA NaN
# 3 68.0 TX 70.0
# 4 NaN CA 88.0
# 5 30.0 NaN NaN