Guia Básico para tratar dados com Pandas em Python

Roberto Vinicius da silva - Jun 22 - - Dev Community

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

. . .