pandas读取csv后筛选数据报UnicodeDecodeError错误如何解决?
问题原因
- pandas读取csv时默认采用延迟加载策略,不会一次性解码所有单元格的内容,所以读文件阶段不会触发编码错误,只有当操作(筛选、遍历等)触碰到包含非法编码的单元格时,才会抛出解码异常。
- 报错信息中的
0xde字节是Latin-1编码中对应Þ字符的字节,你的csv文件实际编码不是utf-8,大概率是Latin-1、GBK或者cp1252这类西欧编码。
解决方法
方案1:读取文件时指定正确编码
最稳妥的方式是读取阶段就指定正确的编码,避免后续操作触发问题,优先试latin1或者cp1252,这两个对西欧语言生成的csv兼容性很高:
import pandas as pd # 优先试cp1252,是Windows系统常用的西欧编码 df = pd.read_csv("online_retail.csv", encoding="cp1252") # 如果cp1252不行,试latin1,这个编码可以兼容所有单字节内容,不会报解码错 # df = pd.read_csv("online_retail.csv", encoding="latin1")
方案2:读取时忽略解码错误
如果不需要保留特殊字符,也可以在读取时设置错误处理策略为忽略,直接丢弃非法编码的字节:
df = pd.read_csv("online_retail.csv", encoding="utf-8", encoding_errors="ignore")
操作验证
读取完成后可以先执行全量遍历确认没有隐藏的编码问题,再做后续操作:
# 遍历所有单元格触发解码,确认无报错 df = df.applymap(str) # 再测试筛选操作 df[df['Quantity'] > 500]
内容的提问来源于stack exchange,提问作者Jack 007
相关产品推荐
相关产品推荐

