You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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']}")
    
    输出结果可能是cp1252gbkiso-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

火山引擎 最新活动