Игнорировать строку при чтении в файле .tsv в python

#python #pandas #csv #dataframe

#python #pandas #csv #фрейм данных

Вопрос:

Я пытаюсь прочитать в файле .tsv, однако я заметил, что в моих данных есть определенная строка, которая вызывает следующую ошибку:

Ошибка синтаксического анализа: ожидалось 112 полей в строке 112, увидел 115

Я отследил ошибку, обнаружив, что в моих данных есть "\t" , которые при попытке чтения в файле считают, что они разделены табуляцией…

Я попробовал следующее, но безуспешно:

 df = pd.read_csv('data.tsv.gz', header=None, sep='t',
                 quoting=csv.QUOTE_NONE, compression='gzip', engine='python',
                 encoding='iso8859_1')
 

Я также пытался использовать: sep='^\t|t' .

Пример данных:

 TheretShould \t Onlytbet6tcolumnstt
 

Вывод в dataframe должен выдавать 6 столбцов со строкой « \t «:

 |There|Should \t Only|be|6|columns|NA|
 

Комментарии:

1. Вы пытались добавить escapechar='\' в свой pd.read_csv() список аргументов?

2. такое простое решение, которое я упустил из виду! Большое спасибо, Йохан!

Ответ №1:

Вы можете добавить аргумент в pd.read_csv() called escapechar. Setting the escape char to ‘», который решит вашу проблему. Таким образом

 df = pd.read_csv('data.tsv.gz', header=None, sep='t', escapechar='\',
                 quoting=csv.QUOTE_NONE, compression='gzip', engine='python',
                 encoding='iso8859_1')
 

делает трюк, как вы показали в своем обновленном вопросе.

Ответ №2:

Если у вас нет значений null и вы можете смириться с чтением его как null, вы можете использовать аргумент na-values как часть read_csv и присвоить это значение как N / A.

Комментарии:

1. К сожалению, в данных присутствуют нулевые значения

2. Вы также можете попробовать установить false_values для установки этого значения в False при чтении.

3. @JohanL предоставил следующее решение: escapechar='\' , и оно работает как шарм.

4. @Aslan: Пожалуйста, измените (или удалите) принятый вами ответ, поскольку он указывает на нерабочее решение. Это сбивает с толку тех, кто придет к этому вопросу позже. Я добавил рабочую строку в качестве ссылки.