Pandas read csv encoding

Pandas read csv encoding

I’m attempting to read a CSV file into a Dataframe in Pandas. When I try to do that, I get the following error:

UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x96 in position 55: invalid start byte

This is from code:

This is on a Windows 7 Enterprise Service Pack 1 machine and it seems to apply to every CSV file I create. In this particular case the binary from location 55 is 00101001 and location 54 is 01110011, if that matters.

Saving the file as UTF-8 with a text editor doesn’t seem to help, either. Similarly, adding the param "encoding=’utf-8′ doesn’t work, either—it returns the same error.

What is the most likely cause of this error and are there any workarounds other than abandoning the DataFrame construct for the moment and using the csv module to read in the CSV line-by-line?

Доброго времени всем!

Читаю с CSV файла кириллицу, вывожу в файлы и получаю xd0x94xd0xbexd0xb1xd0xb0xd0xb2xd0xb8xd1x82xd1x8, как читать и выводить кириллицу?

Задача:
входной файл csv — взять его шапку и сделать ключи.
Каждая новая строка — значения.
На выходе список со словарями.
Далее список надо вывести в файл, и в тех местах, где использована кириллица в CSV — получается xd0x94xd0xbexd0xb1xd0xb0xd0xb2xd0xb8xd1x82xd1x8.

Код(без кириллицы все работает как надо):

Так же буду рад любой критикесоветам, как сделать код производительнейчитабельней.

Я запускаю программу, которая обрабатывает 30 000 подобных файлов. Случайное число из них останавливается и создает эту ошибку .

Источник / создание этих файлов происходит из одного места. Каков наилучший способ исправить это, чтобы продолжить импорт?

4 ответа

read_csv принимает параметр encoding для работы с файлами в разных форматах. В основном я использую read_csv(‘file’, encoding = "ISO-8859-1") или, альтернативно, encoding = "utf-8" для чтения, и вообще utf-8 для to_csv .

Читайте также:  Asus amd radeon rx 560 evo

Вы также можете использовать псевдоним ‘latin1’ вместо ‘ISO-8859-1’ .

Борясь с этим некоторое время и думал, что я опубликую по этому вопросу, поскольку это первый результат поиска. Добавление тега encoding = ‘iso-8859-1 "в pandas read_csv не сработало, и не было никакой другой кодировки, продолжавшей давать UnicodeDecodeError.

Если вы передаете дескриптор файла в pd.read_csv (), вам нужно поместить атрибут encoding = в файл открытым, а не в read_csv. Очевидное в ретроспективе, но тонкая ошибка для отслеживания.

Самый простой из всех решений:

  • Откройте файл csv в Sublime text editor .
  • Сохраните файл в формате utf-8.

В возвышенном виде щелкните Файл -> Сохранить с кодировкой -> UTF-8

Затем вы можете прочитать свой файл, как обычно:

Если есть много файлов, вы можете пропустить возвышенный шаг.

Просто прочитайте файл, используя

и другие различные типы кодирования:

Pandas позволяет указывать кодировку, но не позволяет игнорировать ошибки, чтобы не автоматически заменять оскорбительные байты. Таким образом, нет одного размера, соответствующего всем методам, но по-разному в зависимости от фактического варианта использования.

  1. Вы знаете кодировку, и в файле нет ошибки кодирования , Отлично: вам нужно просто указать кодировку:
  2. Вы не хотите беспокоиться о вопросах кодирования и хотите, чтобы этот проклятый файл загружался, независимо от того, содержат ли какие-то текстовые поля мусор. Хорошо, вам нужно использовать кодировку Latin1 , потому что она принимает любой возможный байт как вход (и преобразует его в символ Юникода того же кода):
  3. Вы знаете, что большая часть файла написанный с определенным кодированием, но также содержит ошибки кодирования. Пример реального мира — это файл UTF8, который был отредактирован с помощью редактора un utf8 и который содержит некоторые строки с другой кодировкой. Pandas не предусматривает специальной обработки ошибок, но функция Python open имеет (предполагая Python3), а read_csv принимает файл, подобный объекту. Типичными параметрами ошибок, которые следует использовать здесь, являются ‘ignore’ , которые просто подавляют оскорбительные байты или (ИМХО лучше) ‘backslashreplace’ , который заменяет оскорбительные байты их защитой от обратного сбрасывания Python:
Ссылка на основную публикацию
Adblock detector