# O método Pandas fillna() para substituir valores NaN

A função `DataFrame.fillna()` biblioteca Python Pandas é utilizada para **substituir valores ausentes num DataFrame**. Isto pode ser muito útil para facilitar os processos de limpeza de dados ou para realizar análises.

## Sintaxe da função `fillna()`Pandas

A função `fillna()` aceita **até cinco parâmetros** e a sua sintaxe é a seguinte:

```python
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None)
```

### Parâmetros relevantes

Podemos ajustar o comportamento da função `DataFrame.fillna()` do Pandas utilizando os seguintes parâmetros:

<table>
  <thead>
    <tr>
      <th><strong>Parâmetro</strong></th>
      <th><strong>Descrição</strong></th>
      <th><strong>Valor padrão</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`value`</td>
      <td>Um valor escalar, um dicionário Python ou uma série para substituir os valores NaN</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`method`</td>
      <td>Indica o método de preenchimento: preenchimento para a frente (`ffill`) ou preenchimento para trás (`bfill`)</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`axis`</td>
      <td>Determina ao longo de qual eixo a operação será realizada (0 ou `index` para as linhas, 1 ou `columns` para as colunas)</td>
      <td>0</td>
    </tr>
    <tr>
      <td>`inplace`</td>
      <td>Se for `True`, as alterações são feitas diretamente no DataFrame original</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>`limit`</td>
      <td>Inteiro que limita o número de valores NaN a substituir</td>
      <td>`None`</td>
    </tr>
  </tbody>
</table>

Nota É **provável que o parâmetro `method` deixe de ser compatível** em versões futuras. Os programadores poderão então utilizar `obj.ffill()` ou `obj.bfill()`, respetivamente, uma vez que têm o mesmo efeito que o parâmetro `method`.

## Utilização do método `DataFrame.fillna()` do Pandas

Existem diferentes formas de utilizar a função `fillna()` do Pandas:

### Substituição de valores NaN por um valor fixo

O primeiro passo consiste em definir um DataFrame:

```python
import pandas as pd
# Ejemplo de DataFrame con diferentes valores
data = {
    'A': [1, 2, None, 4],
    'B': [None, 2, 3, 4],
    'C': [1, None, 3, 4]
}
df = pd.DataFrame(data)
print(df)
```

A aparência do DataFrame que acabámos de definir é a seguinte:

```none
A    B    C
0  1.0  NaN  1.0
1  2.0  2.0  NaN
2  NaN  3.0  3.0
3  4.0  4.0  4.0
```

Nota Tenha em atenção que, no Pandas, o valor `None` é interpretado como `NaN` em DataFrames e Series.

Agora pode utilizar a função `fillna()` do Pandas para substituir os valores em falta pelo valor 0:

```python
# Reemplazo de los valores faltantes por el valor 0
df_filled = df.fillna(0)
print(df_filled)
```

Todos os valores NaN incluídos na função foram substituídos por 0:

```none
A    B    C
0  1.0  0.0  1.0
1  2.0  2.0  0.0
2  0.0  3.0  3.0
3  4.0  4.0  4.0
```

### Utilização do método de preenchimento para a frente `ffill`

O método `ffill` pode ser utilizado para preencher os valores NaN com os valores anteriores de cada coluna. Para isso, é necessário passá-lo como parâmetro para a função:

```python
# Reemplazo de todos los valores NaN por el valor anterior
df_ffill = df.fillna(method='ffill')
print(df_ffill)
```

Neste exemplo, os valores NaN nas colunas «A» e «C» foram substituídos pelos valores anteriores na mesma coluna. Como na coluna «B» não havia nenhum valor anterior, o valor NaN foi mantido:

```none
A    B    C
0  1.0  NaN  1.0
1  2.0  2.0  1.0
2  2.0  3.0  3.0
3  4.0  4.0  4.0
```

### Utilização do método de preenchimento retroativo `bfill` por linhas

Os valores NaN também podem ser preenchidos com os valores posteriores da mesma linha. Para isso, deve usar o método `bfill` e, além disso, definir o parâmetro `axis` em 1:

```python
df_bfill = df.fillna(method='bfill', axis=1)
print(df_bfill)
```

Como resultado, os valores NaN na linha zero e na linha dois foram substituídos pelos seus valores posteriores, respetivamente. Na primeira linha, permanece um valor NaN, uma vez que nessa linha não existe nenhum valor posterior com o qual o substituir.

```none
A    B    C
0  1.0  1.0  1.0
1  2.0  2.0  NaN
2  3.0  3.0  3.0
3  4.0  4.0  4.0
```


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