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

读取URL压缩CSV至Pandas DataFrame时遇UnicodeDecodeError求助

解决读取压缩CSV到Pandas时的UnicodeDecodeError问题

错误提示UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 56说明你尝试用utf-8编码读取的CSV文件实际不是utf-8格式,而且你之前修改open()的encoding参数无效——因为保存zip文件用的是二进制模式(wb),该参数对二进制写入没有作用,错误出在pd.read_csv()读取解压后的CSV环节。

以下是具体解决方案:

方案1:指定正确编码读取CSV

常见的非utf-8编码有latin-1、gbk、cp1252等,可逐个尝试:

# 尝试latin-1(兼容所有字节,不会报错)
df = pd.read_csv('data.csv', encoding='latin-1')

# 针对中文文件尝试gbk
df = pd.read_csv('data.csv', encoding='gbk')

# Windows环境常见编码cp1252
df = pd.read_csv('data.csv', encoding='cp1252')

若不确定编码,可用chardet库检测:

import chardet

with open('data.csv', 'rb') as f:
    result = chardet.detect(f.read(1000))  # 读取前1000字节检测编码
print(result['encoding'])  # 输出检测结果,将其作为read_csv的encoding参数

方案2:内存中直接处理(更高效)

无需将zip和CSV保存到本地,直接在内存中解压读取,节省磁盘空间且避免文件残留:

import pandas as pd
from urllib.request import urlopen
import zipfile
from io import BytesIO

url = 'https://www.../data.zip'

with urlopen(url) as response:
    zip_data = BytesIO(response.read())
    with zipfile.ZipFile(zip_data) as zf:
        with zf.open('data.csv') as csv_file:
            # 替换为检测到的正确编码
            df = pd.read_csv(csv_file, encoding='latin-1')
df.head()

额外说明

  • 若尝试多种编码仍报错,可通过zf.infolist()查看zip内文件信息,确认文件是否为纯文本CSV(比如是否是伪装成csv的xlsx或仍处于压缩状态)。
  • 临时应急可使用encoding_errors='ignore'跳过错误字节(不推荐,会丢失数据):
    df = pd.read_csv('data.csv', encoding_errors='ignore')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:53:09