quarta-feira, 12 de agosto de 2020

Como usar o método fillna() do pandas

Photo by Brett Jordan on Unsplash

A primeira linguagem de programação que vem a mente, quando o assunto é analise de dados, é a linguagem python. Isso por que python fornece um ecossistema de pacotes para a análise de dados. pandas é um desses pacotes. Com ele podemos importar dados de um dataset e realizar algumas analises facilmente.
Um problema comum, quando importamos dados de um dataset, é elementos com valores NaN (sem valor). Esse valor pode causar problemas e erros na analise de dados, por isso pode ser interessante colocar um valor para esses elementos.
Nesse tutorial, vamos aprender a substituir valores NaN dos dataframes pandas utilizando o método fillna(). O método fillna() pode preencher todos os elementos vazios com um valor definido.
Para começar, vamos precisar de um dataframe com elementos vazios.

>>> import pandas as pd
>>> import numpy as np
>>> dados = {
... 'A':[np.nan, 4, 8, np.nan],
... 'B':[9, np.nan, 6, np.nan],
... 'C':[np.nan, 1, np.nan, 9],
... 'D':[np.nan, np.nan, 8, 3]
... }
>>> df = pd.DataFrame(dados)
>>> df
     A    B    C    D
0  NaN  9.0  NaN  NaN
1  4.0  NaN  1.0  NaN
2  8.0  6.0  NaN  8.0
3  NaN  NaN  9.0  3.0

O funcionamento do método fillna() é bem simples, só precisamos passar para o método qual é o valor que vai substituir o valor NaN. Assim o método vai procurar por todo o dataframe, e onde encontrar um elemento vazio, ele vai preencher esse elemento com o valor que recebeu.

>>> df.fillna(2)
     A    B    C    D
0  2.0  9.0  2.0  2.0
1  4.0  2.0  1.0  2.0
2  8.0  6.0  2.0  8.0
3  2.0  2.0  9.0  3.0

Também podemos utilizar os valores do próprio dataframe para preencher os elementos vazios. Por exemplo, se quiséssemos preencher o elemento vazio com o último valor não vazio, passaríamos o valor 'ffill' (forward fill) para o parâmetro method. Outra meio de preencher é com o próximo valor não vazio da sequência, nesse caso passamos o valor 'bfill' (back fill) para o parâmetro method.

>>> dados = [
... [None, 2, 6],
... [1, None, None],
... [None, 3, None]
... ]
>>> df = pd.DataFrame(dados)
>>> df
     0    1    2
0  NaN  2.0  6.0
1  1.0  NaN  NaN
2  NaN  3.0  NaN

>>> df.fillna(method='ffill')
     0    1    2
0  NaN  2.0  6.0
1  1.0  2.0  6.0
2  1.0  3.0  6.0

>>> df.fillna(method='bfill')
     0    1    2
0  1.0  2.0  6.0
1  1.0  3.0  NaN
2  NaN  3.0  NaN

Também podemos definir o valor que será usado para preencher cada coluna. Por exemplo, você pode definir que os elementos vazios da coluna A serão preenchidos com o valor 'um' e da coluna D com o valor 'dois'.

>>> replace = {'A':'um', 'D':'dois'}
>>> df.fillna(value=replace)
    A    B    C     D
0   1  NaN  5.0  dois
1  um  2.0  NaN     6
2   3  NaN  8.0  dois
3  um  4.0  NaN     9

Um parâmetro, que pode ser útil, é o limit. Com ele podemos definir quantos elementos vazios serão substituídos. Por exemplo, se você quiser que apenas um elementos de cada coluna seja substituído passe o valor 1 para o parâmetro limit.

>>> df.fillna(value=replace, limit=1)
     A    B    C     D
0    1  NaN  5.0  dois
1   um  2.0  NaN     6
2    3  NaN  8.0   NaN
3  NaN  4.0  NaN     9

Repare que apenas um elemento vazio de cada coluna foi substituído.
Quer aprender mais sobre a biblioteca pandas? Comece com nossos tutoriais pandas.

Referência:
Função fillna()

0 comentários:

Postar um comentário