Blog

Postado em em 20 de novembro de 2021

Tratar Valores Vazios no Python em uma Base de Dados

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:

Como Tratar Valores Vazios em uma Base de Dados

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 tratar valores vazios no Python

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.

Importando os dados e verificando as informações vazias
Importando os dados e verificando as informações vazias

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.

Verificando os dados vazios na base de dados
Verificando os dados vazios na 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)
Tratando valores vazios na hora de importar a base de dados
Tratando valores vazios na hora de importar a base de dados

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)
Removendo os valores vazios
Removendo os valores vazios

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)
Preenchendo com valores fixos
Preenchendo com valores fixos

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)
Preenchendo com valor anterior ou seguinte
Preenchendo com valor anterior ou seguinte

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)
Interpolando os valores vazios
Interpolando os valores vazios

Conclusão

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.

Hashtag Treinamentos

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


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

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!