Python 2.7 с пандами to_csv () выдает UnicodeEncodeError: кодек «ascii» не может кодировать символ u '\ xc7' в позиции 4: порядковый номер не в диапазоне (128) - PullRequest
0 голосов
/ 18 июня 2019

Я использую Python 2.7, и для преодоления проблем UTF-8 я использую метод to_csv панд. Проблема в том, что я по-прежнему получаю ошибки Unicode, которые не появляются, когда я запускаю скрипт на локальном ноутбуке с python 3 (не вариант для пакетной обработки).

df = pd.DataFrame(stats_results)

df.to_csv('/home/mp9293q/python_scripts/stats_dim_registration_set_column_transpose.csv', quoting=csv.QUOTE_ALL, doublequote=True, index=False,
          index_label=False, header=False, line_terminator='\n', encoding='utf-8');

выдает ошибку:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc7' in position 4: ordinal not in range(128)

1 Ответ

0 голосов
/ 18 июня 2019

Я полагаю, что у вас может быть одна из этих двух проблем (или, возможно, обеих): -

  1. Как вы упомянули в комментариях, файл, в котором вы пытаетесь сохранить Unicode Data , уже существует.Тогда вполне вероятно, что целевой файл, возможно, не будет иметь UTF-8/16/32 в качестве схемы кодирования.

    Под этим я подразумеваю, когда файл был изначально создан,схема кодирования может быть не UTF-8 , а может быть ANSI .Итак, проверьте, относится ли схема кодирования файла назначения к семейству UTF или нет.

  2. Кодируйте строку Unicode в UTF-8, прежде чем сохранять ее в файле.Под этим я подразумеваю любой контент, который вы пытаетесь сохранить в файл назначения, если он содержит текст Unicode, то он должен быть сначала закодирован.

    Пример.

    # A character which could not be encoded via 8 bit ASCII
    Uni_str = u"Ç"
    
    # Converting the unicode text, into UTF-8 format
    Uni_str = Uni_str.encode("utf-8")
    

    Приведенный выше кодработает по-разному в Python 2.x и 3.x, причина в том, что 2.x использует ASCII в качестве схемы кодирования по умолчанию, а 3.x использует UTF-8.Другое различие между ними заключается в том, как они обрабатывают строку после ее передачи через encode().

    В Python 2.x

    type(u"Ç".encode("utf-8"))
    

    Выходы

    <type 'str'>
    

    ВPython 3.x

    type(u"Ç".encode("utf-8"))
    

    Выходы

    <class 'bytes'>
    

    Как вы можете заметить, в python 2.x тип возвращаемого значения encode() - строка, но в 3.x -байт.

Поэтому для вашего случая я бы порекомендовал вам кодировать каждое строковое значение, содержащее данные Unicode в вашем фрейме данных, используя encode(), прежде чем пытаться сохранить его в файле.

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