将 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?

pandas实现数据的读取和写入

pandas如何在现有的Excel表格上新建工作表并添加dataframe

在 read_csv 之后选择 pandas 数据框中的列时出现关键错误