将 pandas df 写入 csv 时出现 Unicode 编码错误
Posted
技术标签:
【中文标题】将 pandas df 写入 csv 时出现 Unicode 编码错误【英文标题】:Unicode Encode Error when writing pandas df to csv 【发布时间】:2015-09-28 15:32:14 【问题描述】:我清理了 400 个 excel 文件并使用 pandas 将它们读入 python 并将所有原始数据附加到一个大 df 中。
然后当我尝试将其导出到 csv 时:
df.to_csv("path",header=True,index=False)
我收到此错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc7' in position 20: ordinal not in range(128)
有人可以提出解决此问题的方法及其含义吗?
谢谢
【问题讨论】:
请说明您使用的是 python 2 还是 3,这两者处理 Unicode 的方式非常不同。然后阅读the Unicode howto,它为这个错误提供了一个很好的背景。这些问题不难解决,但要先了解基础知识。 docs.python.org/2.7/howto/unicode.html 【参考方案1】:添加一个答案以帮助自己稍后搜索:
对我有帮助的一个技巧是先对有问题的系列进行编码,然后将其解码回 utf-8。喜欢:
df['crumbs'] = df['crumbs'].map(lambda x: x.encode('unicode-escape').decode('utf-8'))
这将使数据帧也能正确打印。
【讨论】:
我喜欢将有用的提示放入答案中以供以后谷歌搜索的想法。在我的工作日期间,Stack Overflow 每天至少访问两次。【参考方案2】:您的 DataFrame 中有 unicode
值。文件存储字节,这意味着所有unicode
必须先编码为字节,然后才能存储在文件中。您必须指定编码,例如utf-8
。例如,
df.to_csv('path', header=True, index=False, encoding='utf-8')
如果不指定编码,则df.to_csv
使用的编码在 Python2 中默认为 ascii
,在 Python3 中默认为 utf-8
。
【讨论】:
在 Python3 中显式添加参数 'encoding='utf-8'' 是否仍然重要,因为它已经是默认选项? @JasonGoal:如果您的代码仅打算使用 Python3 运行,则没有必要,但此处的明确性将允许(至少这一行)您的代码在 Python2 和 Python3 下运行。跨度>以上是关于将 pandas df 写入 csv 时出现 Unicode 编码错误的主要内容,如果未能解决你的问题,请参考以下文章
将 pandas 数据框转换为 PySpark RDD 时出现问题?
导入 Pandas 时出现 Apache Zeppelin 错误
如何使用 Python Pandas 将 CSV 文件写入 XLSX?