6
respostas

Problemas com dados incorretos em um dataset (usando Pandas)

Tenho um dataset chamado Auto.csv, que tem a forma:

mpg    cylinders    displacement    horsepower    weight    acceleration    year    origin    name
18    8    307    130    3504    12    70    1    chevrolet chevelle malibu
15    8    350    165    3693    11.5    70    1    buick skylark 320
18    8    318    150    3436    11    70    1    plymouth satellite
16    8    304    150    3433    12    70    1    amc rebel sst
17    8    302    140    3449    10.5    70    1    ford torino
15    8    429    198    4341    10    70    1    ford galaxie 500
14    8    454    220    4354    9    70    1    chevrolet impala
14    8    440    215    4312    8.5    70    1    plymouth fury iii
14    8    455    ?    4425    10    70    1    pontiac catalina
15    8    390    190    3850    8.5    70    1    amc ambassador dpl
15    8    383    170    3563    10    70    1    dodge challenger se
14    8    340    160    3609    8    70    1    plymouth 'cuda 340
15    8    400    150    3761    9.5    70    1    chevrolet monte carlo
14    8    455    225    3086    10    70    1    buick estate wagon (sw)
24    4    113    95    2372    15    70    3    toyota corona mark ii
22    6    198    95    2833    15.5    70    1    plymouth duster
18    6    199    97    2774    15.5    70    1    amc hornet

Imagine que o dataset tem 1milhão de linhas e, possivelmente em algum lugar há um caracter no lugar de um número, ou seja, por um erro, em algum lugar na coluna horsepower que deveria conter apenas números há uma caracter estranho como '?'

Como eu posso testar se a coluna horsepower por exemplo, contém apenas números e, em caso, contrário, retornar um novo dataframe Pandas com a linha removida?

import pandas as pd
import numpy as np

carros = pd.read_csv('Auto.csv',sep =',')
print(carros['horsepower'])
6 respostas

Bom dia Edson!

Você pode remover os registros com dados inconsistentes, mas estará perdendo informações. É melhor você substituir os valores inconsistentes pela média.

Me manda o arquivo csv para eu dar uma olhada:

jjcbj1986@gmail.com

Edson,

Sem saber o que vc fazer com os dados, mas não seria melhor vc transformar esse campo em NaN (Not a Number) indicando que ele é um valor missing, do que perder a linha toda?

Ou até, se isso diz respeito a cavalos de potência de carros reais, pode não ser tão difícil achar esse dados para esse carro específico e completar o dataset

@Jonas:

Enviei por email. O dataset foi retirado daqui: http://www-bcf.usc.edu/~gareth/ISL/data.html

@Welton Vaz de Souza:

A minha ideia seria remover ou editar os campos mas não consegui fazê-lo com Python, apenas manualmente, o que seria inviável caso fossem muitos registros.

Estou tentando aplicar algoritmos de machine learning nos dados!

Edson,

Vc pode fazer isso de varias formas:

1) passando o parâmetro: na_values="?" pra que as interrogações sejam nulos tb, exemplo:

carros = pd.read_csv('Auto.csv',sep =' ', na_values='?')

obs: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

2) ou ainda desta forma: https://stackoverflow.com/questions/33961028/remove-non-numeric-rows-in-one-column-with-pandas/46573346#46573346

@Welton Vaz de Souza:

Existe algum "procedimento genérico" para checar um dataset, em busca de dados inválidos ou faltantes?