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.
- Certificato SSL e protezione DDoS
- Velocità, flessibilità e scalabilità
- Dominio e consulente personale
- 1 anno gratis del gestionale di fatturazione elettronica FlexTax
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 5000
Ora è 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 5000
Mascheramento 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