Pandas to_csv () вызывает исключение кодировки 'ascii', даже если установлено значение encoding = 'utf-8' - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть файл с некоторыми символами utf-8. Загрузил его в dataframe (с явно заданной кодировкой utf-8) и теперь пытается записать его в csv. Я продолжаю получать UnicodeEncodeError, и я не уверен почему. Я установил encoding='utf-8' (также пытался encoding='utf8') и все еще получаю его со ссылкой на код 'ascii' c.

Одна подсказка в том, что у меня нет проблемы при тестировании на машине Windows, но я получаю ее на машине с Ubuntu.

Я пытался обновить pandas от 0,25 -> 1,0, и это не имеет значения.

Обратите внимание, что это используется в Django.

    df.to_csv(f, index=False, line_terminator='\\n', encoding='utf-8')

  File "/home/webapp/.virtualenvs/django/lib/python3.6/site-packages/pandas/core/generic.py", line 3203, in to_csv
    formatter.save()
  File "/home/webapp/.virtualenvs/django/lib/python3.6/site-packages/pandas/io/formats/csvs.py", line 204, in save
    self._save()
  File "/home/webapp/.virtualenvs/django/lib/python3.6/site-packages/pandas/io/formats/csvs.py", line 323, in _save
    self._save_chunk(start_i, end_i)
  File "/home/webapp/.virtualenvs/django/lib/python3.6/site-packages/pandas/io/formats/csvs.py", line 354, in _save_chunk
    libwriters.write_csv_rows(self.data, ix, self.nlevels, self.cols, self.writer)
  File "pandas/_libs/writers.pyx", line 65, in pandas._libs.writers.write_csv_rows
UnicodeEncodeError: 'ascii' codec can't encode character '\\xc7' in position 67: ordinal not in range(128)

1 Ответ

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

Часть проблемы, оказывается, связана с проблемой Apache / mod_wsgi, в которой по умолчанию используется предпочтительное кодирование ANSI. Я нашел хорошее обсуждение и решение здесь. Исправление включает в себя установку кодировки системы по умолчанию на UTF-8, что-то вроде этого в файле Apache conf:

WSGIDaemonProcess my-django-site lang='en_US.UTF-8' locale='en_US.UTF-8'

Я до сих пор не уверен, почему параметр кодирования to_csv () не переопределяет значения по умолчанию.

...