# DataFrame.where() di Pandas: verificare condizioni all’interno di un DataFrame

La funzione `DataFrame.where()` di [Pandas in Python](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/pandas-di-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](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/dataframe-in-pandas-per-python/) in base a una determinata condizione.

## Sintassi di `DataFrame.where()` in Pandas

La funzione `where()` accetta fino a cinque parametri e segue la sintassi di base mostrata qui di seguito:

```python
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None)
```

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:

<table>
  <thead>
    <tr>
      <th><strong>Parametro</strong></th>
      <th><strong>Descrizione</strong></th>
      <th><strong>Valore predefinito</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`cond`</td>
      <td>Condizione che deve essere soddisfatta affinché i valori siano mantenuti nel DataFrame</td>
      <td></td>
    </tr>
    <tr>
      <td>`other`</td>
      <td>Valore che sostituisce i valori che non soddisfano la condizione</td>
      <td></td>
    </tr>
    <tr>
      <td>`inplace`</td>
      <td>Se `True`, l’operazione viene eseguita direttamente sul DataFrame</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>`axis`</td>
      <td>Specifica lungo quale asse applicare la condizione (`axis=0`/righe o `axis=1`/colonne)</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`level`</td>
      <td>Specifica il livello dell’indice multiplo su cui applicare la condizione</td>
      <td>`None`</td>
    </tr>
  </tbody>
</table>

## 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:

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

Questo il DataFrame risultante dal precedente codice:

```none
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.

```python
# 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)
```

Il DataFrame risultante, `df_positive`, contiene solo i risultati di vendita positivi e sostituisce tutti i valori negativi con `0`, come richiesto:

```none
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:

```python
# 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)
```

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):

```none
Regione    Vendite_Trimestre1    Vendite_Trimestre2
0     Nord            15000.0                                20000.0
1        Sud                NaN                                    25000.0
2        Est                NaN                                        NaN
3     Ovest             NaN                                        NaN
```


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/dataframe-where-di-pandas-per-python/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/dataframe-where-di-pandas-per-python/) for AI/LLM consumption.