La funzione DataFrame.where() di Pandas in Python si usa per eseguire ma­ni­po­la­zio­ni con­di­zio­na­li dei dati all’interno di un DataFrame. Consente ai pro­gram­ma­to­ri o alle pro­gram­ma­tri­ci di so­sti­tui­re o ma­sche­ra­re i valori in un DataFrame in Pandas in base a una de­ter­mi­na­ta con­di­zio­ne.

Web Hosting
Diventa il n°1 della rete con il provider di hosting n°1 in Europa
  • Di­spo­ni­bi­li­tà garantita al 99,99%
  • Dominio, SSL ed e-mail inclusi
  • As­si­sten­za 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)
python

In questo caso, la funzione si applica a un DataFrame e mantiene invariati solo i valori che sod­di­sfa­no la con­di­zio­ne spe­ci­fi­ca­ta (cond). Tutti gli altri valori, invece, vengono so­sti­tui­ti con quelli indicati nel parametro other.

Prin­ci­pa­li parametri

La funzione DataFrame.where() di Pandas accetta diversi parametri che per­met­to­no una ma­ni­po­la­zio­ne dei dati altamente per­so­na­liz­za­bi­le:

Parametro De­scri­zio­ne Valore pre­de­fi­ni­to
cond Con­di­zio­ne che deve essere sod­di­sfat­ta affinché i valori siano mantenuti nel DataFrame
other Valore che so­sti­tui­sce i valori che non sod­di­sfa­no la con­di­zio­ne
inplace Se True, l’ope­ra­zio­ne viene eseguita di­ret­ta­men­te sul DataFrame False
axis Specifica lungo quale asse applicare la con­di­zio­ne (axis=0/righe o axis=1/colonne) None
level Specifica il livello dell’indice multiplo su cui applicare la con­di­zio­ne None

Ap­pli­ca­zio­ne di DataFrame.where() in Pandas

La funzione where() può essere uti­liz­za­ta in diverse si­tua­zio­ni che ri­chie­do­no la ma­ni­po­la­zio­ne con­di­zio­na­le dei dati. Questo include, ad esempio, la pulizia dei dati o la creazione di nuove colonne in base a con­di­zio­ni.

So­sti­tu­zio­ne con­di­zio­na­le dei valori

Sup­po­nia­mo di avere un DataFrame che contiene i risultati delle vendite di un’azienda e di voler vi­sua­liz­za­re solo i risultati positivi, so­sti­tuen­do 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 ri­sul­tan­te dal pre­ce­den­te codice:

Regione      Vendite_Trimestre1  Vendite_Trimestre2
0    Nord          15000                            20000
1     Sud            -5000                          25000
2     Est             3000                          -7000
3    Ovest          -1000                          5000

Ora è possibile so­sti­tui­re tutti i valori negativi con 0 usando where(). Tuttavia, è im­por­tan­te as­si­cu­rar­si che la funzione venga applicata solo alle colonne con valori numerici, al­tri­men­ti il confronto potrebbe non fun­zio­na­re cor­ret­ta­men­te.

# 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 ri­sul­tan­te, df_positive, contiene solo i risultati di vendita positivi e so­sti­tui­sce 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

Ma­sche­ra­men­to con­di­zio­na­to dei valori

DataFrame.where() in Pandas può anche essere usato per ma­sche­ra­re i valori, cioè per rendere visibili solo alcune parti di un DataFrame. Di seguito, il DataFrame deve vi­sua­liz­za­re solo i valori superiori a un certo valore di soglia (in questo caso 10000). Anche in questo caso è ne­ces­sa­rio as­si­cu­rar­si che vengano con­si­de­ra­te 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 ri­sul­tan­te df_masked mostra solo i valori superiori a 10000. Tutti gli altri valori sono vi­sua­liz­za­ti 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
Vai al menu prin­ci­pa­le