Pandas игнорирует установленную кодировку в read_csv? - PullRequest
0 голосов
/ 14 февраля 2020

Используя Linux, Pandas 1.0.1 и Python 3.6 Я получаю странную ошибку в работе:


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/app-root/lib/python3.6/site-packages/luigi/worker.py", line 199, in run
    new_deps = self._run_get_new_deps()
  File "/opt/app-root/lib/python3.6/site-packages/luigi/worker.py", line 141, in _run_get_new_deps
    task_gen = self.task.run()
  File "/opt/app-root/src/import_validation/validate_csv.py", line 275, in run
    validate(temp_csv, self.query_id)
  File "/opt/app-root/src/import_validation/validate_csv.py", line 263, in validate
    pandas.read_csv(path, encoding='latin1', sep=sep)
  File "/opt/app-root/lib/python3.6/site-packages/pandas/io/parsers.py", line 676, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/opt/app-root/lib/python3.6/site-packages/pandas/io/parsers.py", line 454, in _read
    data = parser.read(nrows)
  File "/opt/app-root/lib/python3.6/site-packages/pandas/io/parsers.py", line 1133, in read
    ret = self._engine.read(nrows)
  File "/opt/app-root/lib/python3.6/site-packages/pandas/io/parsers.py", line 2037, in read
    data = self._reader.read(nrows)
  File "pandas/_libs/parsers.pyx", line 859, in pandas._libs.parsers.TextReader.read
  File "pandas/_libs/parsers.pyx", line 874, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas/_libs/parsers.pyx", line 951, in pandas._libs.parsers.TextReader._read_rows
  File "pandas/_libs/parsers.pyx", line 1083, in pandas._libs.parsers.TextReader._convert_column_data
  File "pandas/_libs/parsers.pyx", line 1136, in pandas._libs.parsers.TextReader._convert_tokens
  File "pandas/_libs/parsers.pyx", line 1253, in pandas._libs.parsers.TextReader._convert_with_dtype
  File "pandas/_libs/parsers.pyx", line 1268, in pandas._libs.parsers.TextReader._string_convert
  File "pandas/_libs/parsers.pyx", line 1458, in pandas._libs.parsers._string_box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe5 in position 12: invalid continuation byte

Как вы можете видеть в трассировке, я уже устанавливаю кодировку to latin1:

pandas.read_csv(path, encoding='latin1', sep=sep)

Почему pandas пытается декодировать UTF-8, когда я указал latin1 в качестве кодировки? Я пытался использовать другие псевдонимы для латиницы 1, это дает тот же результат.

Любая идея, почему pandas, кажется, игнорирует мои настройки кодировки?

Редактировать: Удален комментарий о не работает в Windows. Произошла та же ошибка, я просто обманул, когда передал файл, а не передал его тем же способом.

1 Ответ

0 голосов
/ 14 февраля 2020

Проблема заключалась в слишком большом количестве уровней абстракции. У меня была оболочка вокруг этого, которая пыталась распаковать файл, если он заканчивался на «gz». Затем я дал pandas не путь, а временный файл. Этот файл, конечно, уже имеет свой набор кодировки, и тогда настройка кодировки игнорируется в pandas. Решением было / было передать кодировку во временный файл или, как я сделал, просто передать исходный путь к pandas, поскольку он автоматически обрабатывает распакованные файлы.

...