Кодировка UTF-8 Pandas DataFrame в MySQL - PullRequest
0 голосов
/ 07 февраля 2019

Я использую Pandas, MySQL и SQLAlchemy.

В настоящее время я использую pandas.to_sql (), чтобы передать мой DataFrame pandas, который содержит текст не-ASCII, в мою базу данных MySQL.Обратите внимание, что с другими фреймами данных, которые я использовал, мой процесс работает отлично

Однако с текстом, не относящимся к ascii, следующий вызов вызывает ошибку:

df.to_sql(
        name='tableOne',
        con=engine,
        index=False,
        if_exists='replace')

Результирующая ошибка (последняя строка):

UnicodeEncodeError: 'ascii' codec can't encode character '\xe5' in position 143: ordinal not in range(128)

После прочтения похожих постов я обнаружил, что ответ состоит в том, чтобы указать в движке 'utf8', как показано ниже:

engine = create_engine(f'mysql+mysqldb://{MYSQL_USER}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8', encoding="utf8")

Я перепробовал все, что моги все, что я мог найти в Интернете.Я изменил свой движок так, чтобы он включал каждую комбинацию 'utf8', 'utf-8' и т. Д. Я пытался вручную кодировать каждый текстовый столбец моего DF в UTF-8.Ничего из этого не работает

Я работал над следующими другими, похожими сообщениями SO, у которых, похоже, есть похожие проблемы и, следовательно, похожие решения, но у меня ничего не получалось:

Еще одна UnicodeEncodeError при использовании метода панд to_sql с MySQL

Как работать с кодировкой в ​​Python 2.7 и SQLAlchemy ?‍☠️

Как мнезаставить SQLAlchemy правильно вставить многоточие Юникода в таблицу mySQL?

преобразовать pandas dataframe в utf8

Спасибо за любую помощь!

Редактировать: исправлено: «Юникод» -> «ascii»

1 Ответ

0 голосов
/ 07 февраля 2019

e5 не является ни ASCII, ни UTF-8.С CHARACTER SET latin1 это å;Имеет ли это смысл?Итак, я предлагаю вам иметь 2 ошибки: одно место запрашивает ascii, другое предоставляет latin1, а другое ожидает utf8.

Однако, как указывает @lenz, E5 также может быть первым байтомперсонажа CJK.Сообщение об ошибке, так как оно ищет ascii, показывает только первый ошибочный байт.Просмотр следующих двух байтов подтвердит это.

Я думаю, что вам не хватает use_unicode=True.

См. python и Panda отмечает, что дальшестр.

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