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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:27:02