DEV Community

Roberto Vinicius da silva
Roberto Vinicius da silva

Posted on

Guia Básico para tratar dados com Pandas em Python

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)

Image description

`
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.

Image description

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("")

Top comments (0)