Guia Básico para tratar dados com Pandas em Python
Roberto Vinicius da silva
Posted on June 22, 2024
Olá, esse guia tem como objetivo apresentar algumas formas de tratamento de dados com a biblioteca pandas do Python, umas das mais utilizadas por profissionais na área de dados.
Primeiro, vamos fazer a importação das respectivas bibliotecas que utilizaremos
`
import pandas as pd
import matplotlib.pylab as plt
Agora, faremos a leitura da nossa base de dados
url= "https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/Data%20files/auto.csv"
Note que, ao fazermos a importação da base de dados, a mesma não tem cabeçalho, então para criar o cabeçalho faremos o processo abaixo:
Criacao do cabeçalho em uma lista com seus respectivos valores
cabecalho = ["symboling","normalized-losses","make","fuel-type","aspiration", "num-of-doors","body-style",
"drive-wheels","engine-location","wheel-base", "length","width","height","curb-weight","engine-type",
"num-of-cylinders", "engine-size","fuel-system","bore","stroke","compression-ratio","horsepower",
"peak-rpm","city-mpg","highway-mpg","price"]
Adicionando o cabeçalho ao dataset que não tem cabeçalho + leitura do dataset no formato csv
df = pd.read_csv(url, names = cabecalho)
`
Nesse exemplo, o valores pendentes vão estar como “?” (interrogação). Alguma dúvidas podem surgir: o que fazer com esses valores que não vieram ? Como tratar ? Posso deletar ? …
A resposta é: Depende.. Existe algumas técnicas que podemos utilizar:
- Apagar a coluna completa que está sem as informações;
- Apagar a linha completa que está sem as informações;
- Substituir os dados pela média/frequência/etc;
Essas são algumas, existem várias outras forma de lidarmos com esses dados pendentes
#Para visualizar alguns dados,usarmos o comando abaixo df.head()
Note que, como havia informado anteriormente, alguns dados pendentes estão como “?” , agora, vamos substituir esses valores por NaN (Not a number)
`
import numpy as np
O comando abaixo substituirá ? por NaN;
O parâmetro inplace = True, salva as alterações realizadas no dataframe que estamos usando (df)
df.replace('?', np.nan, inplace = True)
Ao executar o head(), você notará que o símbolo de interrogação foi substituido por NaN
df.head()
`
Tratando (substituindo) os dados pendentes
No algoritmo abaixo, iremos substituir os valores NaN da coluna normalized-losses pela média, depois que convertermos para o tipo float
`avg_norm_loss = df["normalized-losses"].astype("float").mean(axis=0)
print("Média da normalized-losses:", avg_norm_loss)
substituir os valores NaN da coluna normalized-losses pela média
df["normalized-losses"].replace(np.nan, avg_norm_loss, inplace=True)
`
E assim podemos dar prosseguimento para todas as outras colunas que tiverem informações pendentes. Algumas dúvidas podem surgir, porque foi feita a conversão da normalized-losses para float ? A respota é: Normalized-losses é do tipo objetct, que seria semelhante a “string”, dessa forma não é possível realizarmos operações matemáticas nesse tipo de objeto, por isso fizemos a conversão.
`avg_bore=df['bore'].astype('float').mean(axis=0)
print("Média da bore:", avg_bore)
Substituindo valores NaN da coluna Bore pela média
df["bore"].replace(np.nan, avg_bore, inplace=True)
Substituindo valores NaN da coluna stroke pela média
stroke_mean = df['stroke'].astype('float').mean(axis=0)
df['stroke'].replace(np.nan, stroke_mean, inplace=True)
avg_horsepower = df['horsepower'].astype('float').mean(axis=0)
Substituindo os valores NaN da coluna 'horsepower' pela média
df['horsepower'].replace(np.nan, avg_horsepower, inplace=True)
`
No exemplo abaixo, vamos deletar todos os registros (linhas) que não tem dados da coluna price:
df.dropna(subset=["price"], axis=0, inplace=True)
Algumas informações que podem ser importantes:
- axis = 0 >> O zero refere-se as linha .. 1 refere-se as colunas
- inplace >> Salva as alterações realizadas no dataframe
Conversão de dados
Como já foi apresentado anteriormente, outra parte fundamental do tratamento dos dados são os tipos de dados na biblioteca pandas: object, float, int,datetime, etc. Afinal, não conseguimos calcular a média de uma variável do tipo string, certo ? Então, precisamos converter o seu data type para que isso seja possível.
Para analisarmos os tipos de dados em pandas, podemos usar a função dtype
`#Verificando o datype em python
Ela retornara o datatype de todas as variáveis (colunas) do nosso data frame
df.dtypes
Abaixo, realizamos a conversão dos data types para float, int e atribuimos a conversão a propria
variável para "salvar" as alterações. Passamos no parâmetro astype("valordavariável")
df[["bore", "stroke"]] = df[["bore", "stroke"]].astype("float")
df[["normalized-losses"]] = df[["normalized-losses"]].astype("int")
df[["price"]] = df[["price"]].astype("float")
df[["peak-rpm"]] = df[["peak-rpm"]].astype("float")`
Antes de fazer a conversão, sempre procure análisar o data type atual da variável com (dtypes) e analisar novamente após a conversão, para garantir que a alteração foi realizada com sucesso.
Esse foi um guia básico e prático de como trabalhar com tratamento de dados utilizando a biblioteca Python, as informações disponibilizadas aqui foram colhidas do curso de Análise de dados com Python — IBM da Cousera, recomendo a todos que estão estudando e procurando ampliar o seu conhecimento nessa área darem uma olhada ou até mesmo realizarem o curso, que apesar de básico é muito bom ! Obrigado a todos por lerem até aqui !
for column in missing_data.columns.values.tolist():
print(column)
print (missing_data[column].value_counts())
print("")
Posted on June 22, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.