Pandas导出DataFrame到CSV时latin-1编码报错该如何解决?
Pandas导出CSV报Latin-1编码错误的解决方法
报错原因
你触发的UnicodeEncodeError是因为数据中存在latin-1编码不支持的Unicode字符(本次报错的是不带点的小写土耳其语i\u0131),latin-1编码仅支持序号在0-255范围内的字符,超出范围的字符无法被编码。
可选解决方法
方案1:更换兼容全字符集的编码(优先推荐,不会丢失数据)
把编码参数替换为支持所有Unicode字符的utf-8系列编码即可:
- 常规场景使用utf-8编码:
df.to_csv('df.csv', sep=';', encoding='utf-8', decimal=',')
- 如果导出的CSV需要在Windows系统用Excel打开,建议用带BOM头的utf-8-sig编码,避免Excel识别乱码:
df.to_csv('df.csv', sep=';', encoding='utf-8-sig', decimal=',')
方案2:强制保留latin-1编码(仅适用于下游系统要求必须用latin-1的场景)
可以通过errors参数指定异常处理规则,避免程序报错:
- 直接忽略所有无法被latin-1编码的字符:
df.to_csv('df.csv', sep=';', encoding='latin-1', decimal=',', errors='ignore')
- 用
?替换所有无法被latin-1编码的字符:
df.to_csv('df.csv', sep=';', encoding='latin-1', decimal=',', errors='replace')
注意:该方案会丢失或修改无法编码的字符内容,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者Economist Learning Python
相关产品推荐
相关产品推荐

