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.

Il tuo web hosting come mai prima d'ora
  • 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)
python

In 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)
python

Questo 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)
python

Il 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)
python

In 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
Hai trovato questo articolo utile?
Vai al menu principale