Python如何处理pandas读取csv出现�等特殊字符乱码问题
解决pandas读取cp1252编码csv特殊字符乱码及关联匹配失败问题
问题本质
两个文件虽然实际编码都是cp1252,但读取时pandas采用了不一致的解码规则:其中一个文件用默认utf-8解码,遇到cp1252编码的特殊字符无法解析,就生成了�替换符;另一个文件解码规则适配了cp1252,正确解析出了É字符,因此相同原始ID在两个DataFrame中实际值不同,关联时无法匹配。
解决方案
- 读取两个csv文件时都显式指定
encoding参数为cp1252,保证解码规则完全统一:
import pandas as pd # 读取两个文件时都加encoding参数 df1 = pd.read_csv("第一个文件路径.csv", encoding="cp1252") df2 = pd.read_csv("第二个文件路径.csv", encoding="cp1252")
- 如果文件中存在少量不符合cp1252编码的异常字符,可添加
encoding_errors参数统一处理异常,避免读取失败:
用encoding_errors="replace"会把所有无法解析的字符统一替换为�,避免因个别异常字符导致整个读取流程中断;用encoding_errors="strict"会在遇到异常字符时直接抛出错误,适合需要准确定位异常数据行的场景。 - 读取完成后可先校验ID列的一致性:取两个DataFrame中疑似乱码的ID样本,执行
df["ID列名"].iloc[样本行号].encode("utf-8")打印字节码,确认相同原始ID的字节码完全一致后再执行内连接操作。
注意事项
Excel打开csv时会自动适配当前系统的默认编码,其显示的字符内容和文件实际存储的字节可能存在偏差,不要以Excel的显示结果作为判断文件编码的唯一依据。
内容的提问来源于stack exchange,提问作者Kshitish Sood
相关产品推荐
相关产品推荐

