You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打开存在编码问题的CSV文件并转为pandas DataFrame?

解决pandas读取含特殊字符CSV的UnicodeDecodeError问题

嘿,这个问题我之前也碰到过!其实pandas是支持类似open里的错误处理的,只是可能你没注意到对应的参数,或者用的版本稍旧。下面给你几个可行的解决方案:

方案1:直接用pandas的encoding_errors参数(推荐,pandas 1.3.0+可用)

从pandas 1.3.0版本开始,read_csv新增了encoding_errors参数,和Python内置open函数的errors参数用法完全一致。你直接把errors="ignore"传进去就行,这样就能跳过解码错误的字符,顺利读取成DataFrame:

import pandas as pd
df = pd.read_csv('file.csv', encoding='utf-8', encoding_errors='ignore')

方案2:先通过open读取内容,再传给pandas

如果你的pandas版本比较旧,不支持encoding_errors,可以先用你已经验证可行的open方式读取文件内容,再用io.StringIO把内容转换成pandas能识别的文件对象,然后读取成DataFrame:

import pandas as pd
from io import StringIO

with open('file.csv', 'r', encoding='utf-8', errors="ignore") as csvfile:
    csv_content = csvfile.read()

df = pd.read_csv(StringIO(csv_content))

这种方式完全复用了你已经测试有效的文件读取逻辑,不会有额外的问题。

方案3:先检测文件的真实编码(更稳妥,避免丢失字符)

errors="ignore"虽然能解决报错,但会直接丢弃解码失败的字符,可能导致文本内容缺失。如果想保留完整内容,建议先检测文件的真实编码:

  1. 先安装chardet库:pip install chardet
  2. 检测编码:
import chardet

with open('file.csv', 'rb') as f:
    result = chardet.detect(f.read())

print("检测到的编码:", result['encoding'])
  1. 用检测到的编码读取文件:
df = pd.read_csv('file.csv', encoding=result['encoding'])

比如常见的中文编码可能是gbk、gb2312或者utf-8-sig,用真实编码读取就不会出现解码错误,也不会丢失字符。

其实pandas并不是没妥善处理错误,只是早期版本没有暴露errors参数的接口,新版本已经补上啦。优先试试方案1,不行再用方案2,追求内容完整性的话选方案3。

内容的提问来源于stack exchange,提问作者Antenna_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:54:15