Leia CSV usando pandas com valores entre aspas duplas e valores com vírgula na coluna

3

Eu preciso ler um arquivo em pandas python do seguinte tipo

"column1","column2","column3","column4"
"value1","value,1","value2","value3"
"value5","value6","value7","value8"
"value32","value21","value,31","value,44"

Eu tentei usar

file1 = pd.read_csv('sample.txt',sep=',\s+',skipinitialspace=True,quoting=csv.QUOTE_ALL,engine=python)

diz algo como ValueErro (espera-se que algumas linhas tenham outra coisa) não exatamente

Eu preciso ler um arquivo CSV grande desse tipo e carregá-lo para o dataframe. que mudanças devo fazer para lê-lo corretamente?

    
por Ajay K S 03.03.2017 / 11:20

2 respostas

2

Use em pandas de python sep=',\s*' em vez de sep=',\s+' , ele tornará o espaço (s) opcional após cada vírgula:

file1 = pd.read_csv('sample.txt',sep=',\s*',skipinitialspace=True,quoting=csv.QUOTE_ALL,engine=python)

Vírgula dentro de aspas duplas é Ok, é permitido pelo padrão rfc4180.
Quanto a " " dentro de valores de dados (como "valor" "13") - você precisará limpar o arquivo de origem antes do processamento. Se as aspas duplas permanecerem juntas, "" não deve ser um problema porque está em conformidade com o padrão CSV, ele chama aspas duplas de escape, mas se houver um espaço entre aspas duplas, será necessário limpá-lo

Uso:

sed -r 's/\"\s+\"/\"\"/g' src.csv >cleared.csv 

antes de você fornecer CSV para os pandas. Isso removerá o espaço entre aspas ou será executado

sed -r 's/\"\s+\"//g' src.csv >cleared.csv 

para remover completamente as aspas internas.

    
por 03.03.2017 / 15:39
2

Não é necessário pré-processar o arquivo csv, apenas use o tipo de mecanismo python:

dataset = pd.read_csv('sample.csv', sep=',', engine='python')
    
por 10.10.2017 / 11:35

Tags