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:
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None)pythonParâmetros relevantes
Podemos ajustar o comportamento da função DataFrame.fillna() do Pandas utilizando os seguintes parâmetros:
| Parâmetro | Descrição | Valor padrão |
|---|---|---|
value
|
Um valor escalar, um dicionário Python ou uma série para substituir os valores NaN | None
|
method
|
Indica o método de preenchimento: preenchimento para a frente (ffill) ou preenchimento para trás (bfill)
|
None
|
axis
|
Determina ao longo de qual eixo a operação será realizada (0 ou index para as linhas, 1 ou columns para as colunas)
|
0 |
inplace
|
Se for True, as alterações são feitas diretamente no DataFrame original
|
False
|
limit
|
Inteiro que limita o número de valores NaN a substituir | None
|
É 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:
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)pythonA aparência do DataFrame que acabámos de definir é a seguinte:
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.0Tenha 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:
# Reemplazo de los valores faltantes por el valor 0
df_filled = df.fillna(0)
print(df_filled)pythonTodos os valores NaN incluídos na função foram substituídos por 0:
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.0Utilizaçã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:
# Reemplazo de todos los valores NaN por el valor anterior
df_ffill = df.fillna(method='ffill')
print(df_ffill)pythonNeste 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:
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.0Utilizaçã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:
df_bfill = df.fillna(method='bfill', axis=1)
print(df_bfill)pythonComo 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.
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