pandas读取CSV报UTF-8解码错误,如何对CSV做UTF-8编码处理?
问题原因
你收到的UnicodeDecodeError报错,本质是你读取的CSV文件本身并不是UTF-8编码,使用encoding='utf-8'参数无法正确解码文件中的特殊字节。
解决步骤
1. 测试兼容编码读取文件
根据文件来源替换read_csv的encoding参数,常见可选项如下:
- 如果文件是在Windows简体中文系统生成的,优先尝试
gbk编码:data = pd.read_csv('Downloads/samplefile.csv', low_memory=False, encoding='gbk') - 如果包含繁体中文,尝试
big5编码;包含西欧/俄语等字符,尝试latin-1(即iso-8859-1)编码:data = pd.read_csv('Downloads/samplefile.csv', low_memory=False, encoding='latin-1')latin-1为单字节编码,不会抛出解码错误,但如果原文件为东亚语言编码,读取后会显示乱码,需重新匹配正确编码
2. 转存为UTF-8格式CSV
成功读取文件后,调用to_csv方法指定编码即可完成转码,示例代码:
# 标准UTF-8编码,适配大多数场景 data.to_csv('Downloads/samplefile_utf8.csv', encoding='utf-8', index=False) # 若需要在Windows系统下用Excel正常打开中文内容,可使用带BOM的UTF-8编码 data.to_csv('Downloads/samplefile_utf8_sig.csv', encoding='utf-8-sig', index=False)
极端场景兼容方案
如果所有编码尝试后仍有报错或乱码,可设置解码时忽略错误字符(会丢失部分无法解码的内容,仅作为最后方案使用):
from io import StringIO # 读取文件时跳过解码错误 with open('Downloads/samplefile.csv', 'rb') as f: content = f.read().decode('utf-8', errors='ignore') data = pd.read_csv(StringIO(content), low_memory=False)
内容的提问来源于stack exchange,提问作者TeflonMusk
相关产品推荐
相关产品推荐

