Я запускаю программу, которая обрабатывает 30 000 похожих файлов. Случайное число из них останавливается и выдает эту ошибку ...
File "C:\Importer\src\dfman\importer.py", line 26, in import_chr
data = pd.read_csv(filepath, names=fields)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 400, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 205, in _read
return parser.read()
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 608, in read
ret = self._engine.read(nrows)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 1028, in read
data = self._reader.read(nrows)
File "parser.pyx", line 706, in pandas.parser.TextReader.read (pandas\parser.c:6745)
File "parser.pyx", line 728, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:6964)
File "parser.pyx", line 804, in pandas.parser.TextReader._read_rows (pandas\parser.c:7780)
File "parser.pyx", line 890, in pandas.parser.TextReader._convert_column_data (pandas\parser.c:8793)
File "parser.pyx", line 950, in pandas.parser.TextReader._convert_tokens (pandas\parser.c:9484)
File "parser.pyx", line 1026, in pandas.parser.TextReader._convert_with_dtype (pandas\parser.c:10642)
File "parser.pyx", line 1046, in pandas.parser.TextReader._string_convert (pandas\parser.c:10853)
File "parser.pyx", line 1278, in pandas.parser._string_box_utf8 (pandas\parser.c:15657)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 6: invalid continuation byte
Источник / создание этих файлов происходят из одного места. Какой лучший способ исправить это, чтобы продолжить импорт?
cp1252
может быть предпочтительнееiso-8859-1
.pd.read_csv('immigration.csv', encoding = "ISO-8859-1", engine='python')
сработало для меняANSI
. Чтобы выяснить это, я открыл csv,notepad
затем щелкнулsave as
, там он показывает кодировку рядом с кнопкой сохранения.Самое простое из всех решений:
Альтернативное решение:
Затем вы можете прочитать свой файл как обычно:
и другие разные типы кодирования:
источник
encoding='iso-8859-1'
использованием вместоengine='python'
throws_csv.Error: field larger than field limit (131072)
.Pandas позволяет указывать кодировку, но не позволяет игнорировать ошибки, чтобы не заменять автоматически нарушающие байты. Таким образом, нет единого размера, подходящего для всех методов, но по-разному, в зависимости от фактического варианта использования.
Вы знаете кодировку, и в файле нет ошибки кодирования. Отлично: нужно просто указать кодировку:
Вы не хотите, чтобы вас беспокоили вопросы кодирования, а хотите, чтобы этот чертов файл загружался, независимо от того, содержат ли некоторые текстовые поля мусор. Хорошо, вам нужно использовать только
Latin1
кодировку, потому что она принимает любой возможный байт в качестве входного (и преобразует его в символ Юникода того же кода):Вы знаете, что большая часть файла написана с определенной кодировкой, но она также содержит ошибки кодирования. Примером из реальной жизни является файл UTF8, который был отредактирован в редакторе, отличном от utf8, и содержит несколько строк с другой кодировкой. В Pandas нет специальной обработки ошибок, но
open
функция Python имеет (предполагается Python3) иread_csv
принимает файл, подобный объекту. Типичный параметр ошибок, который здесь используется, это то,'ignore'
что просто подавляет ошибочные байты или (IMHO лучше),'backslashreplace'
который заменяет ошибочные байты на обратную escape-последовательность их Python:источник
после выполнения этого кода вы найдете кодировку 'filename.csv', затем выполните код следующим образом
вот и ты
источник
В моем случае файл имеет
USC-2 LE BOM
кодировку, согласно Notepad ++. Этоencoding="utf_16_le"
для питона.Надеюсь, это поможет кому-то быстрее найти ответ.
источник
В моем случае это работает для Python 2.7:
И только для Python 3:
источник
Попробуйте указать engine = 'python'. Это сработало для меня, но я все еще пытаюсь понять, почему.
источник
Я публикую ответ для предоставления обновленного решения и объяснения причин возникновения этой проблемы. Скажем, вы получаете эти данные из базы данных или книги Excel. Если у вас есть специальные символы, например
La Cañada Flintridge city
, если вы не экспортируете данные с использованиемUTF-8
кодировки, вы будете вводить ошибки.La Cañada Flintridge city
станетLa Ca\xf1ada Flintridge city
. Если вы используетеpandas.read_csv
без каких-либо настроек параметров по умолчанию, вы получите следующую ошибкуК счастью, есть несколько решений.
Вариант 1 , исправить экспорт. Обязательно используйте
UTF-8
кодировку.Вариант 2 , если фиксируя экспортирующей проблему не доступны для вас, и вы должны использовать
pandas.read_csv
, обязательно включают в себя следующие paramters,engine='python'
. По умолчанию, pandas использует,engine='C'
который отлично подходит для чтения больших чистых файлов, но вылетит, если произойдет что-то неожиданное. По моему опыту, установкаencoding='utf-8'
никогда не исправляла этоUnicodeDecodeError
. Кроме того, вам не нужно использоватьerrors_bad_lines
, однако, это все еще вариант, если он действительно вам нужен.Вариант 3: решение - мое предпочтительное решение лично. Прочитайте файл, используя ванильный Python.
Надеюсь, что это помогает людям, сталкивающимся с этой проблемой впервые.
источник
Некоторое время боролся с этим и думал, что я отвечу на этот вопрос, так как это первый результат поиска. Добавление
encoding="iso-8859-1"
тега в pandasread_csv
не работало, и никакая другая кодировка не давала UnicodeDecodeError.Если вы передаете дескриптор файла,
pd.read_csv(),
вам нужно поместитьencoding
атрибут в открытый файл, а не вread_csv
. Очевидно, задним числом, но тонкая ошибка, чтобы выследить.источник
Пожалуйста, попробуйте добавить
Это поможет. Работал на меня. Также убедитесь, что вы используете правильный разделитель и имена столбцов.
Вы можете начать с загрузки всего 1000 строк, чтобы быстро загрузить файл.
источник
Этот ответ, кажется, является всеобъемлющим для проблем кодирования CSV. Если у вас странная проблема с кодировкой вашего заголовка, например:
Тогда у вас есть символ метки порядка байтов (BOM) в начале вашего CSV-файла. Этот ответ решает проблему:
Python read csv - спецификация, встроенная в первый ключ
Решение состоит в том, чтобы загрузить CSV с
encoding="utf-8-sig"
:Надеюсь, это кому-нибудь поможет.
источник
Я публикую обновление в этой старой теме. Я нашел одно решение, которое работает, но требует открытия каждого файла. Я открыл свой CSV-файл в LibreOffice, выбрал «Сохранить как»> «Изменить настройки фильтра». В выпадающем меню я выбрал кодировку UTF8. Затем я добавил
encoding="utf-8-sig"
вdata = pd.read_csv(r'C:\fullpathtofile\filename.csv', sep = ',', encoding="utf-8-sig")
.Надеюсь, это кому-нибудь поможет.
источник
У меня проблемы с открытием файла CSV на упрощенном китайском, загруженного из онлайн-банка. Я пытался
latin1
, я пыталсяiso-8859-1
, я пыталсяcp1252
, но все безрезультатно.Но
pd.read_csv("",encoding ='gbk')
просто делает работу.источник
Я использую Jupyter-ноутбук. И в моем случае, он показывал файл в неправильном формате. Опция «кодирование» не работала. Поэтому я сохраняю CSV в формате UTF-8, и это работает.
источник
Попробуй это:
Похоже, он позаботится о кодировке без явного выражения через аргумент
источник
Проверьте кодировку, прежде чем перейти к пандам. Это замедлит тебя, но ...
В питоне 3.7
источник
Другая важная проблема, с которой я столкнулся, которая привела к той же самой ошибке, была:
источник
read_excel
в пандах.Вы можете попробовать это.
источник