У меня есть два идентичных файла CSV, но один не может быть прочитан в Pandas DataFrame из-за UnicodeDecodeError - PullRequest
3 голосов
/ 02 апреля 2019

Заголовок объясняет главную проблему, но позвольте мне остановиться подробнее. Допустим, у меня есть два CSV-файла - csv1 и csv2. Каждый из них выглядит так:

csv1:

enter image description here

и csv2:

enter image description here

Проблема в том, что когда я запускаю pd.read_csv('./csv1.csv'), он работает нормально, но когда я запускаю pd.read_csv('./csv2.csv'), я получаю

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 73: invalid start byte

Разница между двумя CSV-файлами заключается в том, что csv2 в основном csv1, но даты отсортированы в порядке возрастания. Для этого я выполнил следующие операции:

csv2 = csv1.sort_values(by=['date'])

csv2.to_csv('./Data/csv_final.csv', index=False)

Кто-нибудь знает, в чем проблема? Я пытался найти другие решения, и многие люди предлагают попробовать указать другую схему кодирования при запуске pd.read_csv(), но мне просто любопытно, с чем может быть связана проблема.

Спасибо.

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

многие люди предлагают попробовать указать другую схему кодировки при запуске pd.read_csv ()

Да, это то, что вы должны сделать - сначала выяснив, какую схему кодирования использует CSV-файл. Поскольку значение по умолчанию utf-8 не работает, рекомендуемое значение windows-1252 является хорошим предположением.

но мне просто интересно, чем может быть вызвана проблема.

Это вызвано тем, что файл CSV не кодируется в кодировке utf-8, которую Пандас принял по умолчанию, и поэтому попытка прочитать его с помощью этой кодировки не работает.

Вы должны убедиться, что понимаете Unicode и кодировку текста в Python . Возможно, также неплохо было бы явно указать кодировку при первом вызове .to_csv.

1 голос
/ 02 апреля 2019

Байт, о котором идет речь, равен 0x80, что в кодировке Windows 1252 является символом евро.

>>> "€".encode("windows-1252")
b'\x80'

Предоставить encoding="windows-1252" в качестве параметра ключевого слова для вызова read_csv().

0 голосов
/ 02 апреля 2019

Сортировка CSV с использованием Excel или другого инструмента может привести к ошибкам кодирования.Вы должны проверить позицию 73, используя простой текстовый редактор, чтобы увидеть, есть ли необычный символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...