# Aplicar condições em DataFrames com Pandas DataFrame.where()

Pode usar a função `DataFrame.where()` da Biblioteca Python Pandas para realizar **manipulações condicionais de dados** em DataFrames. Esta função permite substituir ou mascarar valores num [DataFrame do Pandas](https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/dataframes-do-pandas-python/) de acordo com uma condição específica.

## Sintaxe do Pandas `DataFrame.where()`

A função `where()` aceita até cinco parâmetros e segue a seguinte sintaxe básica:

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

Esta função é aplicada a um DataFrame, e apenas os valores que cumprem a condição especificada (`cond`) permanecem inalterados. Todos os outros valores são substituídos pelos definidos em `other`.

### Parâmetros relevantes

O Pandas `DataFrame.where()` aceita vários parâmetros que permitem uma manipulação flexível dos dados:

<table>
  <thead>
    <tr>
      <th><strong>Parâmetro</strong></th>
      <th><strong>Descrição</strong></th>
      <th><strong>Valor predefinido</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`cond`</td>
      <td>Condição que deve ser cumprida para que os valores no DataFrame permaneçam inalterados</td>
      <td></td>
    </tr>
    <tr>
      <td>`other`</td>
      <td>Valor pelo qual serão substituídos os valores que não cumprirem a condição</td>
      <td></td>
    </tr>
    <tr>
      <td>`inplace`</td>
      <td>Se for `True`, a operação é realizada diretamente no DataFrame existente</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>`axis`</td>
      <td>Especifica em que eixo a condição é aplicada (`axis=0` ou `axis=1`)</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`level`</td>
      <td>Especifica em que nível do multi-índice a condição deve ser aplicada</td>
      <td>`None`</td>
    </tr>
  </tbody>
</table>

## Como utilizar o Pandas `DataFrame.where()`

A função `where()` pode ser utilizada numa variedade de situações em que são necessárias **manipulações condicionais de dados**. Isso inclui, por exemplo, a limpeza de dados ou a **criação de novas colunas com base em condições**.

### Substituição condicional de valores

Suponhamos que tem um DataFrame com os resultados de vendas de uma empresa e deseja mostrar apenas os resultados positivos. Todos os resultados negativos devem ser substituídos por 0. Isso pode ser feito com a função Pandas `DataFrame.where()`. Primeiro, crie o DataFrame:

```python
import pandas as pd
# Crear un DataFrame de ejemplo
data = {
    'Región': ['Norte', 'Sur', 'Este', 'Oeste'],
    'Ventas_Q1': [15000, -5000, 3000, -1000],
    'Ventas_Q2': [20000, 25000, -7000, 5000]
}
df = pd.DataFrame(data)
print(df)
```

O código anterior gera o seguinte DataFrame:

```none
Región  Ventas_Q1  Ventas_Q2
0    Norte        15000        20000
1      Sur        -5000        25000
2     Este         3000        -7000
3    Oeste        -1000         5000
```

Com uma chamada a `where()`, pode substituir todos os valores negativos por `0`. No entanto, deve certificar-se de **considerar apenas as colunas que contêm valores numéricos**, caso contrário a comparação não funcionará.

```python
# Reemplazo condicional de valores
df_positive = df.copy()
df_positive[['Ventas_Q1', 'Ventas_Q2']] = df[['Ventas_Q1', 'Ventas_Q2']].where(df[['Ventas_Q1', 'Ventas_Q2']] > 0, 0)
print(df_positive)
```

O DataFrame resultante `df_positive` contém apenas os resultados positivos das vendas e substitui os valores negativos por `0`, conforme desejado:

```none
Región     Ventas_Q1     Ventas_Q2
0    Norte          15000        20000
1      Sur                0        25000
2     Este            3000             0
3    Oeste                0         5000
```

### Filtragem condicional de valores

O Pandas `DataFrame.where()` também pode ser usado para mascarar ou filtrar valores, ou seja, para mostrar apenas certas partes de um DataFrame. No exemplo a seguir, o DataFrame mostrará apenas os valores que estão acima de um limite específico (neste caso, `10000`). Novamente, certifique-se de que apenas as colunas numéricas sejam consideradas:

```python
# Mostrar solo los valores mayores a 10000
df_masked = df.copy()
df_masked[['Ventas_Q1', 'Ventas_Q2']] = df[['Ventas_Q1', 'Ventas_Q2']].where(df[['Ventas_Q1', 'Ventas_Q2']] > 10000)
print(df_masked)
```

Neste caso, o DataFrame resultante `df_masked` mostra apenas os valores superiores a `10000`. Todos os outros valores são apresentados como `NaN`:

```none
Región     Ventas_Q1     Ventas_Q2
0    Norte        15000.0        20000.0
1      Sur             NaN        25000.0
2     Este             NaN             NaN
3    Oeste             NaN             NaN
```


This is a markdown version of: [https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/funcao-where-para-dataframes-do-pandas-em-python/](https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/funcao-where-para-dataframes-do-pandas-em-python/) for AI/LLM consumption.