Muitos já viram o seguinte erro ao importar um arquivo csv no pandas:
ParserError: Error tokenizing data. C error: Expected 44 fields in line 66, saw 46
Ao que tudo indica, o Python esperava encontrar 44 campos na linha 66 e encontrou 46. Isso pode ter várias causas, mas uma das mais comuns é o arquivo ter um separador como a vírgula ou ponto-e-vírgula e algum campo também ter esse separador. Mas como resolver isso?
Bom, só para você entender melhor o erro, imagine que você seja um banco e tenha uma base de cadastro dos seus clientes. Em uma coluna há o CPF, em outra o nome, em outra a renda e há mais uma coluna, chamada “informações adicionais”. Nela, o gerente do banco ou o atendente pode escrever qualquer informação extra sobre o cliente. Poderia ser algo como: “Cliente está sem renda, porém começará a trabalhar em abril.” Ou a mesma coisa, mas ao invés da vírgula, você tem ponto-e-vírgula. Sacou o erro que isso vai causar?
Ao exportar esse arquivo como um csv, seja ele separado por ponto-e-vírgula ou por vírgula, na hora que você tiver que importar ele no Python, ele vai enxergar 5 imputs, porém você só tem 4 colunas no cabeçalho – CPF, nome, renda e informações adicionais. Quando você importar isso para o Python, vai acontecer o seguinte erro:
ParserError: Error tokenizing data. C error: Expected 4 fields in line 5, saw 5
O Python, ou melhor, o Pandas, não conseguirá importar isso da forma correta. Não há muito o que fazer aqui – até onde eu saiba, claro -, a não ser ajustar o arquivo origem. Mas se esse erro for algo irrisório na sua base, você pode pular ele, basta incluir o parâmetro error_bad_lines de read_csv(). Veja um exemplo que usei recentemente ao analisar uma base de informações dos filmes do IMDB:
df = pd.read_csv('IMDB.csv', error_bad_lines = False)
Ok, mas quantas linhas será que você ignorou?
Isso é fácil de ver:
with open("imdb.csv") as f: len_csv = sum(1 for line in f) number_of_skipped_rows = len_csv - len(df) number_of_skipped_rows
Agora você decide se pede para algum dev ajudar a melhorar o sistema ou se simplesmente ignora as linhas com erro!
Gostou do conteúdo? Se inscreva para receber as novidades! Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e compartilhar com seus amigos. De verdade, isso faz toda a diferença. Você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato.
Bons estudos!