在将 Pandas 数据框写入 CSV 文件时出现了 Unicode 编码错误。

33
我使用pandas将400个Excel文件读取并清理后,将所有原始数据附加到一个大的数据框中。接着,当我尝试将其导出为CSV文件时:
df.to_csv("path",header=True,index=False)

I get this error:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc7' in position 20: ordinal not in range(128)

有人能建议一种解决方法并说明其含义吗?

谢谢


请告知您使用的是Python 2还是Python 3,因为这两个版本对Unicode的处理方式非常不同。然后阅读Unicode HowTo,它能为您提供此错误的背景信息。这些问题并不难解决,但必须先了解基础知识。 - roeland
https://docs.python.org/2.7/howto/unicode.html - marbel
2个回答

69

您的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中,既然'utf-8'已经是默认选项,那么明确添加参数'encoding='utf-8''是否仍然重要? - Jason Goal
@JasonGoal:如果你的代码只是用Python3运行,那么这并不是必需的,但是显式地指定版本可以让(至少这一行)代码在Python2和Python3下都能运行。 - unutbu

19

为了帮助我日后使用谷歌,我想添加一个答案:

一个对我有帮助的技巧是先编码一个有问题的系列,然后再将其解码回到utf-8。像这样:

df['crumbs'] = df['crumbs'].map(lambda x: x.encode('unicode-escape').decode('utf-8'))

这样还可以正确地打印数据框。


6
我喜欢将有用的提示整合成一个答案,以便稍后在Google中搜索。Stack Overflow是我每天工作时至少访问两次的网站。 - RufusVS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接