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

Pandas读取TSV文件触发ValueError,如何忽略异常行?

解决Pandas读取IMDB制表符分隔文件时的异常行忽略问题

问题根源

你遇到的ValueError: Unable to parse string 'Reality-TV'异常,是因为部分行的列被双引号包裹,而你提前指定了该列的数据类型(比如数值型),Pandas无法将带引号的字符串解析为对应类型导致的。

无需预处理文件的解决方法

直接在read_csv(制表符分隔用sep='\t')中添加参数跳过解析错误的行,分两种场景:

1. Pandas 1.3.0及以上版本(推荐)

使用on_bad_lines参数,设置为'skip'直接跳过异常行:

import pandas as pd

# 分块读取示例代码
chunker = pd.read_csv(
    "imdb_dataset.tsv",
    sep="\t",
    usecols=["你指定的列名1", "列名2"],  # 替换为你的目标列
    dtype={"列名1": str, "列名2": int},  # 替换为你的指定类型
    na_values=["NA", ""],
    chunksize=1000,
    on_bad_lines="skip"  # 关键参数:跳过解析失败的行
)

# 遍历处理每个分块
for chunk in chunker:
    # 这里写你的分块处理逻辑
    print(chunk.shape)

如果需要查看被跳过的行信息,可将on_bad_lines设为'warn',会打印警告日志但不中断程序。

2. Pandas 1.3.0以下版本

用error_bad_lines=False替代(该参数已被官方标记为过时,但旧版本仍可用):

chunker = pd.read_csv(
    "imdb_dataset.tsv",
    sep="\t",
    usecols=["你指定的列名1", "列名2"],
    dtype={"列名1": str, "列名2": int},
    na_values=["NA", ""],
    chunksize=1000,
    error_bad_lines=False
)

补充说明

如果不想跳过行,也可以先不指定dtype,读取后再对目标列做类型转换和异常值处理,但这种方法需要额外的清洗步骤,不如直接跳过异常行高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:15:02