Blog

Postado em em 11 de abril de 2023

O que é NaN e Null no Python? – Como Tratar?

Na aula de hoje eu quero falar sobre o que é NaN e Null no Python. Comparar eles com valores vazios e iguais a 0 para que você não confunda.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala impressionadores, hoje vamos aprender o que é NaN e Null no Python, vamos ver como fazer o tratamento de valores vazios, pois é muito importante quando você vai fazer uma análise de dados que faça o tratamento dessas informações de forma adequada.

Para isso vou te mostrar alguns métodos para tratar valores vazios no Python, assim você garante que está fazendo o tratamento correto e não terá problemas na hora de fazer suas análises.

Ainda quero te mostrar como deletar valores vazios no Python (seja em linhas ou colunas) e como fazer interpolação de valores no Python para adequar melhor essas informações.

O que é NaN e Null no Python?

Antes de começar os exemplos, é importante dizer que os valores NaN e Null não são iguais a valores vazios ou igual a zero.

Esses valores indicam que aquela célula ou aquela informação da base de dados não foi preenchida e isso é diferente de estar preenchido com o número zero ou com o espaço vazio.

Vamos analisar uma base de dados – Exemplo prático

O primeiro passo é importar o Pandas e a tabela para o código.

import pandas as pd

tabela = pd.read_csv("base.csv")

display(tabela)

Feito isso, podemos visualizar a tabela, observe que existem células zeradas e células com valores NaN e Null.

Como ver os valores preenchidos da tabela?

print(tabela.info())

Usando o (.info) vamos saber quantas linhas temos na tabela e quantas estão preenchidas.

Você também pode fazer a busca pela soma dos valores vazios

print(tabela.isnull().sum())

Rodando o código você vai ver em uma lista o total de valores vazios para cada coluna.

Agora que já colocamos os códigos para ver os valores na base de dados, vamos passar para o tratamento desses valores.

Métodos para tratar valores vazios

Cada situação em que existe um valor vazio deve ser analisado separadamente, em alguns casos vamos apenas substituir o vazio por zero, em outros casos podemos fazer uma média para completar esses espaços, cada tratamento depende do contexto daquela célula.

Substituindo um valor vazio por um valor fixo

tabela2 = tabela.fillna(value=0)

display(tabela2)
valor fixo
valor fixo

Podemos colocar dentro dos parênteses qualquer valor ou cálculo para ser aplicado no lugar do espaço vazio, observe que fazendo desta forma todos os valores da tabela foram substituídos por zero.

Substituindo de acordo com uma regra – Valor que vem antes ou depois

Neste caso, é como se estivéssemos arrastando o valor da coluna de cima para baixo, a célula vazia será preenchida com o mesmo valor da célula imediatamente acima da vazia (método ffill) ou imediatamente abaixo (método bfill).

Desta forma cada célula com valor vazio é tratada individualmente.

tabela3 = tabela.fillna(method="ffill")

tabela4 = tabela.fillna(method="bfill")

display(tabela3)

display(tabela4)

Substituir pelo valor Máximo, Mínimo ou Média

Muitas vezes dependendo da análise que você estiver fazendo, pode fazer mais sentido preencher com o valor máximo(max), o mínimo(min) ou até mesmo a média (mean). Isso vai depender muito do tipo de análise que estiver fazendo.

tabela5 = tabela.fillna(value=tabela["TotalGasto"].min())

display(tabela5)

É importante definir em que coluna o cálculo será feito, porque nem toda coluna faz sentido receber este valor, observe que estamos definindo não só o valor como também a coluna onde será aplicado.

Valores por coluna

Neste caso estamos passando dentro dos parênteses um dicionário, nele temos o nome da coluna e o valor que vamos usar no lugar dos valores vazios, a única preocupação aqui é que, o nome da coluna deve ser copiado idêntico para o código.

tabela6 = tabela.fillna({"TotalGasto": tabela["TotalGasto"].mean(), "MesesComoCliente": tabela["MesesComoCliente"].mean()})

display(tabela6)

Quando você usar este formato para a edição, somente as colunas que estão indicadas na fórmula serão alteradas, você pode alterar para um número como 0 ou colocar a média como fizemos no exemplo acima.

Você também pode aplicar as médias em colunas específicas como fizemos acima e depois aplicar outro método para preencher as células vazias restantes da base de dados, aplicar o método bfill, por exemplo, completando com os mesmos valores nas células abaixo das células vazias.

tabela6 = tabela.fillna({"TotalGasto": tabela["TotalGasto"].mean(), "MesesComoCliente": tabela["MesesComoCliente"].mean()})

tabela6 = tabela6.fillna(method="bfill")

display(tabela6)

Todas as formas que vimos até agora substituem os valores vazios por outros valores, mas, às vezes precisamos apenas deletar, vou te mostrar agora como deletar valores.

Como editar todas as colunas em que todos os valores estão vazios?

Para isso vamos usar o drop que significar largar, para usar esse recurso temos que passar entre parênteses dois parâmetros:

How = Deletar quando (“all” todos os valores estão vazios) ou (“any” alguns valores são vazios).

Axis = (axis = 0 -> linhas), (axis=1 -> coluna)
  • Coluna
tabela7 = tabela.dropna(how="all", axis=1)

display(tabela7)
  • Linha
tabela8 = tabela7.dropna(how="any", axis=0)

display(tabela8)

Obs. Neste segundo exemplo onde estamos excluindo os valores vazios das linhas que possuem pelo menos 1 valor vazio, temos que nos atentar e não fazer esse tratamento em tabelas que ainda possuem colunas inteiras vazias, neste caso toda a tabela seria excluída.

Observe que, a ordem em que o tratamento é feito importa para o resultado esperado e coerente.

Caso especial – Interpolação

Para explicar a interpolação vamos lembrar que completamos a coluna de gastos com a média. Mas será que esses clientes tiveram mesmo seus gastos na média?

Isso é muito improvável, existem outros métodos para ajustar esses gastos dentro da interpolação.

Digite no Google -> Pandas interpolate

pandas interpolate - Google
pandas interpolate – Google

Clicando no link você terá acesso a todas as formas de interpolação que esse dataframe consegue fazer, a interpolação pode ser feita pelo valor mais próximo, quadrático, cúbico, linear, etc.

Na prática, o que isso significa?

Vamos aplicar a interpolação na nossa tabela original na coluna de gastos.

Observe que nesta coluna temos um valor preenchido seguido de vários valores vazios, depois recomeçam os valores preenchidos.

A interpolação consegue preencher essas células que estão no meio vazias não com um valor único como a média, mas sim, com uma conta, uma lógica.

Vamos interpolar usando o método linear e verificar o resultado.

tabela["TotalGasto"] = tabela["TotalGasto"].interpolate(method="linear")

display(tabela)

Neste caso em que temos dois valores preenchidos um em cada ponta e no meio diversas células vazias, estamos completando as células do meio com valores médios que vão do primeiro valor e decrescem até o último valor.

Isso pode fazer sentido para você ou você pode usar os outros métodos desse dataframe, eu recomendo que você teste porque existem diversas opções com soluções mais rebuscadas que essa no método. Vale a pena fazer testes e entender melhor.

Conclusão O que é NaN e Null no Python

Você já conhecia os métodos disponíveis em Python para fazer o ajuste de células, linhas ou colunas vazias na tabela?

Nesta aula trouxe exemplos de como tratar esses dados, existem diversas formas de fazer esses tratamentos, formas mais simples e mais robustas.

Como fazer, vai depender muito do tipo de análise que você está fazendo, a lógica usada e a quantidade dos dados.

Espero que tenham gostado da aula! Eu fico por aqui! Até a próxima,

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Power BI e virar uma referência na sua empresa? Inscreva-se agora mesmo no Power BI Impressionador