Большинство вопросов о чтении строк с диска в Python связаны с проблемами кода c. В отличие от этого, у меня есть CSV-файл, в котором просто нет данных с мусором. Вот как создать пример:
b = bytearray(b'a,b,c\n1,2,qwe\n10,-20,asdf')
b[10] = 0xff
b[11] = 0xff
with open('foo.csv', 'wb') as fid:
fid.write(b)
Обратите внимание, что во второй строке третьего столбца есть два байта, 0xFF
, которые не представляют никакой кодировки, только небольшой объем данных мусора.
Когда я пытаюсь прочитать это с pandas.read_csv
:
import pandas as pd
df = pd.read_csv('foo.csv') # fails
Естественно, я получаю ошибку:
File "pandas/_libs/parsers.pyx", line 881, in pandas._libs.parsers.TextReader.read
...
File "pandas/_libs/parsers.pyx", line 1520, in pandas._libs.parsers._string_box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Однако я могу успешно Прочтите этот файл, если я использую Pandas 'Python CSV engine:
df2 = pd.read_csv('foo.csv', engine='python') # success
В этом случае недопустимые символы заменяются U+EFBF
символами, которые Unicode использует для представления «недопустимых символов».
Вопрос: есть ли способ для Pandas 'C CSV двигателя сделать то же самое, что и Python здесь?