Come utilizzare dropna() di Python pandas per eliminare i valori NA dal DataFrame

Introduzione

In questo tutorial, imparerai come utilizzare la funzione DataFrame dropna() di panda.

I valori NA sono “Non disponibili”. Questo può applicarsi a Null, None, pandas.NaT, o numpy.nan. Utilizzando dropna() verranno eliminati le righe e le colonne con questi valori. Questo può essere utile per fornirti solo dati validi.

Per default, questa funzione restituisce un nuovo DataFrame e il DataFrame di origine rimane invariato.

Questo tutorial è stato verificato con Python 3.10.9, pandas 1.5.2 e NumPy 1.24.1.

Sintassi

dropna() accetta i seguenti parametri:

dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)
  • axis: {0 (o 'indice'), 1 (o 'colonne')}, predefinito 0
  • Se 0, elimina le righe con valori mancanti.
  • Se 1, elimina le colonne con valori mancanti.
  • how: {'any', 'all'}, predefinito 'any'
  • Se 'any', elimina la riga o la colonna se uno qualsiasi dei valori è NA.
  • Se 'all', elimina la riga o la colonna se tutti i valori sono NA.
  • thresh: (opzionale) un valore int per specificare la soglia per l’operazione di eliminazione.
  • subset: (opzionale) etichetta di colonna o sequenza di etichette per specificare righe o colonne.
  • inplace: (opzionale) un valore bool.
  • Se True, il DataFrame di origine viene modificato e viene restituito None.

Costruzione dei DataFrame di esempio

Costruisci un DataFrame di esempio che contiene valori validi e non validi:

dropnaExample.py
import pandas as pd
import numpy as np

d1 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish'],
'ID': [1, 2, 3, 4],
'Population': [100, 200, np.nan, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT]
}

df1 = pd.DataFrame(d1)
print(df1)

Questo codice stamperà il DataFrame:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT

Poi aggiungi un secondo DataFrame con righe e colonne aggiuntive con valori NA:

d2 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish', pd.NaT],
'ID': [1, 2, 3, 4, pd.NaT],
'Population': [100, 200, np.nan, pd.NaT, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT, pd.NaT],
'Endangered': [pd.NaT, pd.NaT, pd.NaT, pd.NaT, pd.NaT]
}

df2 = pd.DataFrame(d2)
print(df2)

Questo produrrà un nuovo DataFrame:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT 4 NaT NaT NaT NaT NaT

Utilizzerai i DataFrame precedenti negli esempi che seguono.

Eliminazione di tutte le righe con valori mancanti

Utilizza dropna() per rimuovere le righe con qualsiasi valore None, NaN, o NaT:

dropnaExample.py
dfresult = df1.dropna()
print(dfresult)

Questo produrrà:

Output
Name ID Population Regions 0 Shark 1 100 1

A new DataFrame with a single row that didn’t contain any NA values.

Eliminazione di tutte le colonne con valori mancanti

Utilizzare dropna() con axis=1 per rimuovere le colonne con qualsiasi valore None, NaN, o NaT:

dfresult = df1.dropna(axis=1)
print(dfresult)

Le colonne con qualsiasi valore None, NaN, o NaT saranno eliminate:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4

A new DataFrame with a single column that contained non-NA values.

Eliminazione righe o colonne se tutti i valori sono Nulli con how

Utilizzare il secondo DataFrame e how:

dropnaExample.py
dfresult = df2.dropna(how='all')
print(dfresult)

Le righe con tutti i valori uguali a NA saranno eliminate:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT

La quinta riga è stata eliminata.

Successivamente, utilizzare how e specificare l’asse:

dropnaExample.py
dfresult = df2.dropna(how='all', axis=1)
print(dfresult)

Le colonne con tutti i valori uguali a NA saranno eliminate:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT 4 NaT NaT NaT NaT

La quinta colonna è stata eliminata.

Eliminazione righe o colonne se viene superata una soglia con thresh

Usa il secondo DataFrame con thresh per eliminare le righe che non soddisfano la soglia di almeno 3 valori non NA:

dropnaExample.py
dfresult = df2.dropna(thresh=3)
print(dfresult)

Le righe che non hanno almeno 3 valori non NA saranno eliminate:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

La terza, quarta e quinta riga sono state eliminate.

Eliminazione righe o colonne per subset specifici

Usa il secondo DataFrame con subset per eliminare le righe con valori NA nella colonna Population:

dropnaExample.py
dfresult = df2.dropna(subset=['Population'])
print(dfresult)

Le righe che hanno valori NA nella colonna Population saranno eliminate:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

La terza, quarta e quinta riga sono state eliminate.

Puoi anche specificare i valori dell’index nel subset quando elimini le colonne dal DataFrame:

dropnaExample.py
dfresult = df2.dropna(subset=[1, 2], axis=1)
print(dfresult)

Le colonne che contengono valori NA nel subset delle righe 1 e 2:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4 4 NaT NaT

La terza, quarta e quinta colonna sono state eliminate.

Cambiare il DataFrame di origine dopo l’eliminazione di righe o colonne con inplace

Per default, dropna() non modifica il DataFrame di origine. Tuttavia, in alcuni casi, potresti voler risparmiare memoria quando lavori con un grande DataFrame di origine utilizzando inplace.

dropnaExample.py
df1.dropna(inplace=True)
print(df1)

Questo codice non utilizza una variabile dfresult.

Questo produrrà in output:

Output
Name ID Population Regions 0 Shark 1 100 1

Il DataFrame originale è stato modificato.

Conclusione

In questo articolo, hai utilizzato la funzione dropna() per rimuovere righe e colonne con valori NA.

Continua il tuo apprendimento con altri tutorial su Python e pandas – Tutorial sul modulo pandas di Python, Eliminazione di righe duplicate in pandas.

Riferimenti

Source:
https://www.digitalocean.com/community/tutorials/pandas-dropna-drop-null-na-values-from-dataframe