Hoje eu quero te mostrar algumas formas de tratar valores vazios no Python para que sua análise de dados fique completa!
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:
Você sabe como fazer o tratamento de valores vazios no Python? Hoje eu quero te mostrar como você pode fazer esse tratamento.
Isso é muito útil, pois você alguma das vezes vai se deparar com bases de dados que possuem valores vazios, e dependendo do caso você tem que saber a maneira correta de tratar esses dados.
Como vamos levar em consideração a análise de dados no Python nós vamos utilizar o Jupyter que já é feito para isso e facilita um pouco, pois já vem com algumas bibliotecas instaladas.
Falando de análise de dados nós vamos utilizar a biblioteca pandas e a biblioteca numpy. No Jupyter essas duas bibliotecas já vêm instalada, então caso esteja utilizando outro editor de Python terá que instalar essas duas bibliotecas.
import pandas as pd
import numpy as np
df = pd.read_csv("clientes.csv")
display(df)
df["TotalGasto"] = pd.to_numeric(df["TotalGasto"], errors="coerce")
# info
print(df.info())
# df.isna() .any() ou .sum()
print(df.isna().sum())
Aqui temos a imagem do código já com o resultado obtido ao executá-lo.
OBS: No código antes de utilizar o info, nós fizemos uma transformação da coluna TotalGasto para transformar o conteúdo dela para número, dessa forma nós vamos conseguir trabalhar normalmente com os valores sem ter problema.
Para essa primeira parte do código nós vamos apenas trazer a base de dados para poder analisar o que temos nessa base.
Nessa base de dados você já pode reparar que na coluna Meses como Cliente nós temos alguns valores que estão como NaN (Not a Number) que traduzindo seria, não é um número.
Então esse NaN nada mais é do que um valor vazio dentro da sua base de dados.
Logo na parte debaixo do código temos o código print(df.info()) que vai mostrar as informações da base de dados dos valores que não são nulos.
E com o código print(df.isna().sum()) nós vamos obter apenas os valores vazios dentro dessa base de dados, só que somando esses valores vazios.
Você vai poder sempre utilizar as duas formas para fazer essa análise de dados, a segunda é mais intuitiva e mais fácil de visualizar os dados vazios, só que a primeira forma ela te dá mais informações, como por exemplo o tipo da informação de cada uma das colunas.
Esses dois códigos são interessantes para que você consiga visualizar a quantidade de informações vazias que tem dentro da sua base de dados.
É claro que com uma quantidade pequena é muito fácil de ajustar até na própria base de dados, o problema é quando temos muitas informações vazias.
Antes de partir para o tratamento dos dados é importante que você saiba o que fazer quando você tem informações que não são identificadas como vazio.
Como assim? Por exemplo na coluna Dependentes nós só temos Sim e Não como resultado, só que muita das vezes, se isso vem de algum formulário ou preenchimento manual.
É possível que a pessoa coloque uma informação qualquer, como um traço “-”, um ponto de interrogação “?”.
E isso para você seria a mesma coisa que uma informação vazia, então vamos aprender como tratar isso de duas maneiras.
# identificar na hora de importar
# valores_varios = ["?", "-"]
# df = pd.read_csv("clientes.csv", na_values=valores_vazios)
# identificar com replace
df = df.replace({"?": np.nan, "-": np.nan})
display(df)
A primeira maneira é já fazer isso quando você importa o arquivo, então já pode criar uma lista com os valores que você vai substituir.
Que nesse caso foram os exemplos que dei, mas você pode colocar outros se precisar.
E depois importar da maneira mostrada, colocando um argumento extra de na_values incluindo o que temos na lista.
Então todos os valores que forem encontrados nessa lista que criou serão considerados como vazios.
A segunda maneira é depois que tiver importado os dados utilizar o replace para substituir os valores por valores vazios.
Agora vamos para as formas de tratamento das informações vazias dentro da base de dados.
A primeira delas é para remover os valores vazios, e para isso vamos simplesmente excluir esses valores.
IMPORTANTE: Sempre que estamos tratando com dados é MUITO IMPORTANTE que você tenha em mente o que pode ou não fazer com essas informações. Esse exemplo que remoção dos valores vazios é caso essa quantidade que é mínima não tenha impacto na sua análise.
# 0 -> exclui linhas, 1-> exclui colunas
df = df.dropna(how="any", axis=0)
display(df)
Lembrando que para cada caso vamos ter que analisar e ver qual o melhor tratamento para os dados.
Nesse exemplo vamos utilizar o dropna que é para excluir todos os valores vazios, mas veja que estamos informando que vamos excluir as linhas que possuem esses valores vazios.
Isso é muito importante, pois você pode acabar excluindo toda uma coluna se não prestar atenção.
As vezes você não vai poder excluir essas informações por inteiro, pois acaba perdendo todas as informações daquela linha.
Então uma possibilidade é substituir esses valores vazios com a média daquela coluna por exemplo.
media = df["MesesComoCliente"].mean()
df["MesesComoCLiente"] = df["MesesComoCliente"].fillna(media)
display(df)
Nesse caso estamos calculando o valor da média da coluna de meses como cliente e estamos inserindo em todos os valores que estão vazios.
Dessa forma não vamos perder as linhas com informações e temos outra maneira de tratar esse tipo de informação vazia.
Outra forma de preencher esses valores vazios é utilizando o preenchimento de valores anteriores ou posteriores.
df["MesesComoCliente"] = df["MesesComoCliente"].fillna(method="bfill")
display(df)
Isso é muito comum em algumas bases de dados que temos apenas um valor e o resto é colocado em células mescladas por exemplo, ou até mesmo para facilitar e diminuir a quantidade de dados.
Então acabam tendo 1 valor e depois uma sequência vazia que vai receber esse mesmo valor, só que podemos preencher tanto com o valor anterior ou com o valor seguinte, vai depender da necessidade.
Dentro do fillna(method nós vamos ter tanto o ffill quanto o bfill. O primeiro vai preencher com o valor anterior enquanto o segundo vai preencher com o valor seguinte.
Para finalizar nós temos como interpolar esses valores, em termos mais gerais a interpolação seria uma aproximação desses valores com base nos valores que já temos.
Mas não vamos entrar em detalhes do que é a interpolação e como ela funciona na prática, estamos apenas mostrando que é mais uma possibilidade de preencher esses valores vazios.
df["MesesComoCliente"] = df["MesesComoCliente"].interpolate()
display(df)
Nessa aula eu te mostrei algumas formas de tratar valores vazios no Python, pois é algo muito importante quando estamos tratando de análise de dados.
Claro que você vai ter que analisar qual é a melhor maneira de tratar os seus dados, pois algumas vezes não pode excluir os valores, precisa substituir ou colocar alguma informação adequada no lugar dos valores vazios.
Agora você já tem conhecimento de algumas maneiras de fazer esse tratamento, basta colocar em prática para fazer os seus tratamentos na sua base de dados.
Para acessar outras publicações de Python, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.