Pandas解析IMDB数据时出现位置溢出错误如何解决?
处理IMDB数据集时的runtimeMinutes解析问题及解决方法
问题背景
用Pandas处理IMDB的title.basics.tsv文件,尝试将runtimeMinutes列解析为"Int64"类型时,出现以下错误:
ValueError: Unable to parse string "Reality-TV" at position 47993
但检查报错提示的第47994行及相邻行,根本找不到Reality-TV这个字符串;删除文件开头的47994条数据后,报错位置变成了65535,怀疑是uint16变量溢出导致报错位置不准,需要解决解析错误并定位真正的问题行。
使用的代码如下:
titles = pd.read_csv("title.basics.tsv", sep="\t", dtype={ "runtimeMinutes": "Int64", }, na_values={ "runtimeMinutes": ["\\N"], })
解决步骤
1. 定位真正的错误行
直接指定dtype会让Pandas在解析时提前报错,且行号不准,所以先不限制类型,读取后排查异常值:
方法一:全量读取后筛选
# 先读取全部数据,不指定runtimeMinutes的类型 titles = pd.read_csv("title.basics.tsv", sep="\t", na_values=["\\N"]) # 找出runtimeMinutes列中不是纯数字的行(排除缺失值) invalid_rows = titles[~titles["runtimeMinutes"].astype(str).str.match(r'^\d+$', na=False)] # 查看错误行的关键信息 print(invalid_rows[["tconst", "titleType", "primaryTitle", "runtimeMinutes"]])
运行后就能直接看到所有包含非数字内容(比如Reality-TV)的行,不用管报错的虚假位置。
方法二:分块读取(适合超大文件)
如果文件太大全量读取内存不够,用分块逐步排查:
chunk_size = 100000 # 每次读10万行 for chunk_idx, chunk in enumerate(pd.read_csv("title.basics.tsv", sep="\t", na_values=["\\N"], chunksize=chunk_size)): # 筛选当前块中的错误行 invalid = chunk[~chunk["runtimeMinutes"].astype(str).str.match(r'^\d+$', na=False)] if not invalid.empty: print(f"在第 {chunk_idx*chunk_size + 1} 到 {(chunk_idx+1)*chunk_size} 行中找到错误行:") print(invalid[["tconst", "runtimeMinutes"]])
2. 解决解析错误
找到错误行后,有两种方式处理,避免后续解析报错:
方式一:读取时自定义转换函数
用converters参数提前处理非数字值,直接转为缺失值:
def parse_runtime(s): # 处理缺失值或非数字内容 if s == "\\N" or not s.strip().isdigit(): return pd.NA return int(s) titles = pd.read_csv("title.basics.tsv", sep="\t", converters={"runtimeMinutes": parse_runtime}, dtype={"runtimeMinutes": "Int64"})
方式二:先读取再转换
先读取为普通类型,清洗后再转成Int64:
titles = pd.read_csv("title.basics.tsv", sep="\t", na_values=["\\N"]) # 把无法转成数字的内容强制转为缺失值,再转Int64类型 titles["runtimeMinutes"] = pd.to_numeric(titles["runtimeMinutes"], errors="coerce").astype("Int64")
关于报错位置偏移的原因
你的猜测是对的:Pandas解析大文件时,内部用uint16记录行号,而uint16的最大值是65535,当行号超过这个值就会溢出,导致报错显示的位置和实际行号不匹配。所以跳过强制类型读取,先排查异常值是最直接的解决办法。
内容的提问来源于stack exchange,提问作者red_trumpet
相关产品推荐
相关产品推荐

