使用pandas.read_csv前需编码为UTF-8?解码错误求解
解决pandas读取CSV时的UnicodeDecodeError问题
这个问题我之前处理过好几次!核心原因就是你的data.csv文件不是UTF-8编码,而pandas默认用UTF-8解码,碰到非UTF-8的字节(比如你提到的0xa2)就会报错。下面给你几个实用的解决思路:
1. 先搞清楚文件的实际编码
第一步最好先确定文件到底用的是什么编码,推荐用chardet库来检测:
- 先安装库:
pip install chardet - 然后运行这段代码检测编码:
输出结果可能是import chardet with open("data.csv", 'rb') as f: # 读取部分内容来检测,大文件可以只读前几KB raw_data = f.read(10000) encoding_result = chardet.detect(raw_data) print(f"检测到的编码: {encoding_result['encoding']}")cp1252、gbk、iso-8859-1这类常见编码。
2. 指定编码读取文件
拿到检测到的编码后,直接在read_table里加上encoding参数就行。另外注意:你原来的代码里指定了names,但文件本身已经有表头行,这样会把第一行数据当成表头,所以如果要保留原表头,去掉names参数即可:
import pandas as pd # 替换成你检测到的编码,比如'cp1252' my_df = pd.read_table("data.csv", sep='|', index_col=False, encoding='cp1252')
如果不想检测编码,也可以直接试试Windows系统下常见的cp1252或者中文环境的gbk,大概率能解决问题。
3. 把文件转成UTF-8(一劳永逸)
如果之后还要频繁使用这个文件,把它转成UTF-8编码更省心:
import chardet # 先检测原文件编码 with open("data.csv", 'rb') as f: raw_data = f.read(10000) source_encoding = chardet.detect(raw_data)['encoding'] # 读取原文件内容并转存为UTF-8编码的新文件 with open("data.csv", 'r', encoding=source_encoding) as f: file_content = f.read() with open("data_utf8.csv", 'w', encoding='utf-8') as f: f.write(file_content)
之后读取新生成的data_utf8.csv就不用再指定编码了:
my_df = pd.read_table("data_utf8.csv", sep='|', index_col=False)
内容的提问来源于stack exchange,提问作者DGav




