Python é uma ótima linguagem para fazer análise de dados, principalmente por causa do fantástico ecossistema de pacotes Python centrados em dados. Pandas é um desses pacotes e torna a importação e análise de dados muito mais fácil.
Às vezes, o arquivo csv tem valores nulos, que são exibidos posteriormente como NaN
no quadro de dados. Assim como o método pandas dropna()
gerencia e remove valores nulos de um quadro de dados, fillna()
gerencia e permite que o usuário substitua os valores NaN
por algum valor próprio.
Sintaxe:
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
Parâmetros:
value: estático, dicionário, matriz, série ou dataframe a ser preenchido em vez deNaN
.
method:method
é usado se o usuário não passar nenhum valor. O Pandas tem métodos diferentes comobfill
,backfill
ouffill
, que preenche o local com o valor do próximo índice ou do anterior, respectivamente.
axis: oaxis
leva o valor int ou string para linhas/colunas. A entrada pode ser 0 ou 1 para Inteiro e 'index' ou 'columns' para String.
inplace: É um booleano que faz as alterações no próprio quadro de dados seTrue
.
limit: Este é um valor inteiro que especifica o número máximo de preenchimentos consecutivos de valoresNaN
.
downcast: É necessário umdict
que especifica qual tipo fazer o downcast. Como Float64 para int64.
** kwargs: qualquer outro argumento de palavra-chave.
Para obter o link para o arquivo CSV usado no código, clique aqui.
Exemplo #1: Substituindo valores NaN por um valor estático.
Antes de substituir:
# importando modelo pandas import pandas as pd # criando um dataframe apartir de um arquivo csv nba = pd.read_csv("nba.csv") print(nba)
Resultado:
Name Team Number Position Age Height Weight College Salary 0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0 1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0 2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN 3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0 4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 NaN 5000000.0 .. ... ... ... ... ... ... ... ... ... 453 Shelvin Mack Utah Jazz 8.0 PG 26.0 6-3 203.0 Butler 2433333.0 454 Raul Neto Utah Jazz 25.0 PG 24.0 6-1 179.0 NaN 900000.0 455 Tibor Pleiss Utah Jazz 21.0 C 26.0 7-3 256.0 NaN 2900000.0 456 Jeff Withey Utah Jazz 24.0 C 26.0 7-0 231.0 Kansas 947276.0 457 NaN NaN NaN NaN NaN NaN NaN NaN NaN [458 rows x 9 columns]
Depois de substituir: No exemplo a seguir, todos os valores nulos na coluna College foram substituídos pela string “No college”. Em primeiro lugar, o quadro de dados é importado de CSV e, em seguida, a coluna College é selecionada e o método fillna() é usado nela.
import pandas as pd nba = pd.read_csv("nba.csv") # substitui os valores nulos da coluna 'College' # por 'No College' nba["College"].fillna("No College", inplace=True) print(nba)
Resultado:
Name Team Number Position Age Height Weight College Salary 0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0 1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0 2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN 3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0 4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 No College 5000000.0 .. ... ... ... ... ... ... ... ... ... 453 Shelvin Mack Utah Jazz 8.0 PG 26.0 6-3 203.0 Butler 2433333.0 454 Raul Neto Utah Jazz 25.0 PG 24.0 6-1 179.0 No College 900000.0 455 Tibor Pleiss Utah Jazz 21.0 C 26.0 7-3 256.0 No College 2900000.0 456 Jeff Withey Utah Jazz 24.0 C 26.0 7-0 231.0 Kansas 947276.0 457 NaN NaN NaN NaN NaN NaN NaN No College NaN [458 rows x 9 columns]
Exemplo #2: Usando o parâmetro do método
No exemplo a seguir, o método é definido como ffill
e, portanto, o valor anterior na mesma coluna substitui o valor nulo. Nesse caso, Georgia State
substituiu o valor nulo na coluna College
das linhas 4 e 5. Da mesma forma, os métodos bfill
, backfill
e pad
também podem ser usados.
import pandas as pd nba = pd.read_csv("nba.csv") # substituindo os valores nan na coluna 'College' # pelo valor da linha anterior nba["College"].fillna( method ='ffill', inplace = True) print(nba.head(10))
Resultado:
Name Team Number Position Age Height Weight College Salary 0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0 1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0 2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN 3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0 4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 Georgia State 5000000.0 5 Amir Johnson Boston Celtics 90.0 PF 29.0 6-9 240.0 Georgia State 12000000.0 6 Jordan Mickey Boston Celtics 55.0 PF 21.0 6-8 235.0 LSU 1170960.0 7 Kelly Olynyk Boston Celtics 41.0 C 25.0 7-0 238.0 Gonzaga 2165160.0 8 Terry Rozier Boston Celtics 12.0 PG 22.0 6-2 190.0 Louisville 1824360.0 9 Marcus Smart Boston Celtics 36.0 PG 22.0 6-4 220.0 Oklahoma State 3431040.0
Exemplo #3: Usando limit
Neste exemplo, um limite de 1 é definido no método fillna()
para verificar se a função para de substituir após uma substituição bem-sucedida do valor NaN ou não.
import pandas as pd nba = pd.read_csv("nba.csv") # substituindo os valores nan na coluna 'College' # pelo valor da linha anterior com limite de # uma substuição nba["College"].fillna(method ='ffill', limit=1, inplace=True) print(nba.head(10))
Name Team Number Position Age Height Weight College Salary 0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0 1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0 2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN 3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0 4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 Georgia State 5000000.0 5 Amir Johnson Boston Celtics 90.0 PF 29.0 6-9 240.0 NaN 12000000.0 6 Jordan Mickey Boston Celtics 55.0 PF 21.0 6-8 235.0 LSU 1170960.0 7 Kelly Olynyk Boston Celtics 41.0 C 25.0 7-0 238.0 Gonzaga 2165160.0 8 Terry Rozier Boston Celtics 12.0 PG 22.0 6-2 190.0 Louisville 1824360.0 9 Marcus Smart Boston Celtics 36.0 PG 22.0 6-4 220.0 Oklahoma State 3431040.0
Resultado: Conforme mostrado na saída, a coluna College
da 4ª linha foi substituída, mas a 5ª não foi, pois o limite foi definido como 1.
Artigo escrito por Kartikaybhutani e traduzido por Acervo Lima de Python | Pandas DataFrame.fillna() to replace Null values in dataframe
0 comentários:
Postar um comentário