我在 Python 中被 UnicodeEncodeError
困住了一段时间。
这就是我正在做的事情:
- 我根据各种分析创建了一个数据框。数据框总共有 30 列,包含多种类型的值(
int
、string
、datetime
等)。 - 我创建了到 Azure 中已安装 MySQL 的远程实例的 SSH 连接。我使用
SQLAlchemy
创建连接。 - 我运行
df.to_sql
命令并收到以下错误
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 8: ordinal not in range(256)
我尝试这样做,但似乎不起作用。
engine = create_engine('mysql+pymysql://user:pwd@host:%s/db?charset=utf8' % server.local_bind_port)
我已阅读here我可以使用u.encode('latin-1', 'replace')
。但是我是否需要执行该操作并遍历每个 String
列并对其进行编码?或者还有什么我可以做的吗?
最佳答案
这是我想出的解决方案。
我创建了一个函数来对数据中的不同字符进行编码。
def custom_encoder(x):
#Check if the value is Unicode
if type(x)==type(u''):
return x.encode('utf8','ignore')
else:
return x
I 循环遍历所有列并对所有值进行编码。此后,MySQL允许数据写入。
关于Python MySQL编码错误: 'latin-1' codec can't encode character: ordinal not in range(256),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319141/