使用pd.read_csv读取mnist.csv时遭遇UnicodeDecodeError问题求助
解决MNIST CSV文件读取的编码错误问题
可行解决方法:
尝试通用兜底编码
使用latin-1编码读取,它能兼容所有字节,不会触发解码错误,适合不确定文件编码的场景:import pandas as pd data = pd.read_csv('mnist.csv', encoding='latin-1')检测文件真实编码
借助chardet库识别文件的实际编码:- 先安装库:
pip install chardet - 运行检测代码:
import chardet with open('mnist.csv', 'rb') as f: detect_result = chardet.detect(f.read()) print(detect_result['encoding']) - 将检测得到的编码填入
pd.read_csv的encoding参数即可。
- 先安装库:
确认文件格式是否正确
MNIST数据集常以二进制格式(如.idx3-ubyte)存在,若你的mnist.csv是被误命名的二进制文件,需用二进制读取方式:import numpy as np def load_mnist_binary(file_path): with open(file_path, 'rb') as f: # 读取MNIST二进制文件的头部信息 magic_num = int.from_bytes(f.read(4), 'big') num_imgs = int.from_bytes(f.read(4), 'big') row_count = int.from_bytes(f.read(4), 'big') col_count = int.from_bytes(f.read(4), 'big') # 读取图像数据并重塑格式 imgs = np.frombuffer(f.read(), dtype=np.uint8).reshape(num_imgs, row_count*col_count) return imgs data = load_mnist_binary('mnist.csv')修复截断的转义字符
若问题出在unicode_escape的截断转义,可手动处理字节流:import pandas as pd from io import StringIO with open('mnist.csv', 'rb') as f: byte_content = f.read() # 替换无法解码的部分,避免报错 str_content = byte_content.decode('unicode_escape', errors='replace') # 从处理后的字符串读取数据 data = pd.read_csv(StringIO(str_content))
内容的提问来源于stack exchange,提问作者Aarush K
相关产品推荐
相关产品推荐

