使用Dask DataFrame读取CSV文件时遭遇UnicodeDecodeError求助
解决Dask读取多CSV时的UnicodeDecodeError问题
以下是几种实用的解决思路:
定位出错的具体文件
批量读取CSV时,通常是单个或少数文件编码异常导致报错。先遍历文件逐个排查:import os import pandas as pd path = "你的文件路径/" relevant_columns = ["列名1", "列名2"] # 替换为你的目标列名 for filename in os.listdir(path): if filename.endswith(".csv"): file_path = os.path.join(path, filename) try: pd.read_csv(file_path, usecols=relevant_columns) print(f"{filename} 读取正常") except UnicodeDecodeError as e: print(f"{filename} 编码错误: {e}")检测异常文件的实际编码
找到出错文件后,用chardet库检测真实编码(先执行pip install chardet安装):import chardet with open("出错的文件路径.csv", 'rb') as f: detect_result = chardet.detect(f.read(10000)) # 读取前10KB数据平衡检测速度与准确性 print(f"检测到编码: {detect_result['encoding']}, 置信度: {detect_result['confidence']}")你遇到的
0x93字节,常见于windows-1252(或cp1252)编码,对应左双引号字符,可优先尝试该编码。指定编码或开启容错处理
- 用检测到的编码批量读取:
df = dd.read_csv(path + '*.csv', usecols=relevant_columns, encoding='windows-1252') df = df.compute() - 若编码检测无效,可开启错误容错(替换/忽略无法解码的字符):
df = dd.read_csv(path + '*.csv', usecols=relevant_columns, encoding='utf-8', errors='replace') # 也可使用 errors='ignore' 直接忽略错误字符
- 用检测到的编码批量读取:
自定义读取逻辑适配多编码文件
若不同文件编码不一致,可自定义单文件读取函数,再用Dask批量处理:from dask.dataframe import from_map import pandas as pd import os def read_csv_with_fallback(filename): try: return pd.read_csv(filename, usecols=relevant_columns, encoding='utf-8') except UnicodeDecodeError: return pd.read_csv(filename, usecols=relevant_columns, encoding='windows-1252') file_list = [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.csv')] df = from_map(read_csv_with_fallback, file_list).compute()
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

