pandas读取含编码错误title列的CSV时如何将无效值设为空或默认值
解决pandas读取含损坏编码CSV文件的方案
你遇到的报错是因为CSV文件存在不符合UTF-8编码规范的字节,title列多语言字符的编码损坏导致默认解码器无法识别,可通过以下方法处理:
方案1:高版本pandas快捷处理(适用pandas ≥ 1.4.0)
pandas 1.4.0及以上版本的read_csv新增了encoding_errors参数,可直接指定解码错误的处理逻辑:
- 仅替换无法解码的字符,保留其余可识别内容:
import pandas as pd # 注意你的样例用竖线分隔字段,可添加sep='|', skipinitialspace=True处理分隔符和字段空格 df = pd.read_csv( 'myFile.csv', encoding='utf-8', encoding_errors='replace', sep='|', skipinitialspace=True )
无法解码的字符会被替换为�占位符,不会触发中断报错。
- 解码失败时直接将
title字段设为空值/自定义默认值:
结合converters参数自定义列处理逻辑,实现粒度更细的控制:
import pandas as pd def safe_process_title(raw_val): try: # 尝试用UTF-8解码原始内容,也可替换为你需要的编码如'gbk'/'latin-1' return raw_val.encode('latin-1').decode('utf-8') except UnicodeDecodeError: # 解码失败返回空值,也可替换为自定义默认值如'无法识别' return '' df = pd.read_csv( 'myFile.csv', # 先用latin-1兼容所有单字节读取,避免整体解码报错 encoding='latin-1', converters={'title': safe_process_title}, sep='|', skipinitialspace=True )
方案2:低版本pandas兼容方案(适用pandas < 1.4.0)
如果你的pandas版本不支持encoding_errors参数,可以先逐行读取文件处理后再转DataFrame:
import pandas as pd rows = [] with open('myFile.csv', 'rb') as f: # 读取表头,按实际分隔符调整split参数 header = f.readline().decode('utf-8').strip().split('|') # 去除表头字段前后空格 header = [col.strip() for col in header] title_idx = header.index('title') for line in f: try: row = line.decode('utf-8').strip().split('|') row = [col.strip() for col in row] except UnicodeDecodeError: # 解码失败时用latin-1读取,将title字段置空 row = line.decode('latin-1').strip().split('|') row = [col.strip() for col in row] row[title_idx] = '' rows.append(row) df = pd.DataFrame(rows, columns=header)
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

