DataFrame.where() di Pandas: verificare condizioni all’interno di un DataFrame
La funzione DataFrame.where() di Pandas in Python si usa per eseguire manipolazioni condizionali dei dati all’interno di un DataFrame. Consente ai programmatori o alle programmatrici di sostituire o mascherare i valori in un DataFrame in Pandas in base a una determinata condizione.
- Disponibilità garantita al 99,99%
- Dominio, SSL ed e-mail inclusi
- Assistenza 24/7 in lingua italiana
Sintassi di DataFrame.where() in Pandas
La funzione where() accetta fino a cinque parametri e segue la sintassi di base mostrata qui di seguito:
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None)pythonIn questo caso, la funzione si applica a un DataFrame e mantiene invariati solo i valori che soddisfano la condizione specificata (cond). Tutti gli altri valori, invece, vengono sostituiti con quelli indicati nel parametro other.
Principali parametri
La funzione DataFrame.where() di Pandas accetta diversi parametri che permettono una manipolazione dei dati altamente personalizzabile:
| Parametro | Descrizione | Valore predefinito |
|---|---|---|
cond
|
Condizione che deve essere soddisfatta affinché i valori siano mantenuti nel DataFrame | |
other
|
Valore che sostituisce i valori che non soddisfano la condizione | |
inplace
|
Se True, l’operazione viene eseguita direttamente sul DataFrame
|
False
|
axis
|
Specifica lungo quale asse applicare la condizione (axis=0/righe o axis=1/colonne)
|
None
|
level
|
Specifica il livello dell’indice multiplo su cui applicare la condizione | None
|
Applicazione di DataFrame.where() in Pandas
La funzione where() può essere utilizzata in diverse situazioni che richiedono la manipolazione condizionale dei dati. Questo include, ad esempio, la pulizia dei dati o la creazione di nuove colonne in base a condizioni.
Sostituzione condizionale dei valori
Supponiamo di avere un DataFrame che contiene i risultati delle vendite di un’azienda e di voler visualizzare solo i risultati positivi, sostituendo tutti i risultati negativi con 0. Per farlo basta usare la funzione DataFrame.where() in Pandas. Si procede creando un DataFrame:
import pandas as pd
# Creare un DataFrame di esempio
data = {
'Regione': ['Nord', 'Sud', 'Est', 'Ovest'],
'Vendite_Trimestre1': [15000, -5000, 3000, -1000],
'Vendite_Trimestre2': [20000, 25000, -7000, 5000]
}
df = pd.DataFrame(data)
print(df)pythonQuesto il DataFrame risultante dal precedente codice:
Regione Vendite_Trimestre1 Vendite_Trimestre2
0 Nord 15000 20000
1 Sud -5000 25000
2 Est 3000 -7000
3 Ovest -1000 5000Ora è possibile sostituire tutti i valori negativi con 0 usando where(). Tuttavia, è importante assicurarsi che la funzione venga applicata solo alle colonne con valori numerici, altrimenti il confronto potrebbe non funzionare correttamente.
# Sostituzione condizionale dei valori
df_positive = df.copy()
df_positive[['Vendite_Trimestre1', 'Vendite_Trimestre2']] = df[['Vendite_Trimestre1', 'Vendite_Trimestre2']].where(df[['Vendite_Trimestre1', 'Vendite_Trimestre2']] > 0, 0)
print(df_positive)pythonIl DataFrame risultante, df_positive, contiene solo i risultati di vendita positivi e sostituisce tutti i valori negativi con 0, come richiesto:
Regione Vendite_Trimestre1 Vendite_Trimestre2
0 Nord 15000 20000
1 Sud 0 25000
2 Est 3000 0
3 Ovest 0 5000Mascheramento condizionato dei valori
DataFrame.where() in Pandas può anche essere usato per mascherare i valori, cioè per rendere visibili solo alcune parti di un DataFrame. Di seguito, il DataFrame deve visualizzare solo i valori superiori a un certo valore di soglia (in questo caso 10000). Anche in questo caso è necessario assicurarsi che vengano considerate solo le colonne numeriche:
# Visualizzare solo i valori superiori a 10000
df_masked = df.copy()
df_masked['Vendite_Trimestre1', 'Vendite_Trimestre2']] = df[['Vendite_Trimestre1', 'Vendite_Trimestre2']].where(df[['Vendite_Trimestre1', 'Vendite_Trimestre2']] > 10000)
print(df_masked)pythonIn questo caso, il DataFrame risultante df_masked mostra solo i valori superiori a 10000. Tutti gli altri valori sono visualizzati come NaN(not a number):
Regione Vendite_Trimestre1 Vendite_Trimestre2
0 Nord 15000.0 20000.0
1 Sud NaN 25000.0
2 Est NaN NaN
3 Ovest NaN NaN
