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

fastai的TextLMDataBunch报NaN错误但DataFrame无空值如何解决

问题成因
  • 你手动校验的是内存中已处理好的DataFrame无NaN,但调用TextLMDataBunch.from_csv时,fastai内部会重新读取CSV文件,默认的CSV解析逻辑没有做异常容错,全量数据体量较大时,若存在行内未转义的逗号、换行符、引号不匹配等情况,就会出现行解析错误,生成的DataFrame会额外产生NaN值,这部分异常是你手动校验内存中DataFrame时查不到的。
  • fastai创建数据集时会默认按valid_pct=0.2随机拆分训练集和验证集,你抽取3千行子集时,拆分后的子集刚好没有命中异常行,因此可以正常运行,全量数据拆分时会覆盖到异常行,所以触发报错。
  • 少数情况下,若文本列存在空字符串"",isna()无法识别这类值,fastai的校验逻辑也可能触发类似报错。
解决方案
  • 优先采用from_df接口创建数据集,直接传入你已经校验过无异常的DataFrame,跳过fastai读取CSV的步骤,避免解析异常:
# 传入已确认无NaN的train DataFrame即可
data_lm = TextLMDataBunch.from_df(path, train_df=train, valid_pct=0.2, min_freq=1)
  • 若必须使用from_csv接口读取文件,可传入CSV解析容错参数,适配你的文件格式:
import csv
data_lm = TextLMDataBunch.from_csv(path, 'train.csv', min_freq=1, 
                                   quoting=csv.QUOTE_ALL, escapechar="\\")
  • 若怀疑存在空字符串异常,可提前做一次清洗再校验:
import numpy as np
# 把空字符串替换为NaN后删除异常行
train['text'] = train['text'].replace("", np.nan)
train = train.dropna(subset=['text'])
# 再次确认无异常
print(train.isna().any().any())
  • 全量数据解析时可适当调大chunksize参数,避免分块读取时的异常:
data_lm = TextLMDataBunch.from_csv(path, 'train.csv', min_freq=1, chunksize=10000)

内容的提问来源于stack exchange,提问作者Chen-CN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:27:03