nltk.word_tokenize处理shape为(1999516,2)数据集报TypeError如何解决
解决方案
报错原因
TypeError: expected string or bytes-like object 报错源于comment列存在非字符串类异常值,最常见为缺失值NaN(属于float类型),传入分词方法时触发类型校验失败。同时200万行数据直接使用默认单线程apply执行效率极低,是长时间无返回的核心原因。
具体操作步骤
1. 预处理comment字段,清理异常值
先统一字段类型,处理空值,二选一即可:
- 方案A:填充空值为空字符串,保留所有数据
import pandas as pd import nltk dataset = pd.read_csv('toxic_comment_classification_dataset.csv') # 填充空值后强制转换为字符串类型 dataset['comment'] = dataset['comment'].fillna('').astype(str)
- 方案B:删除comment列为空的行,仅保留有效数据
dataset = dataset.dropna(subset=['comment']).copy() dataset['comment'] = dataset['comment'].astype(str)
2. 高效执行分词
原生单线程apply处理200万行数据耗时极长,推荐使用并行加速工具swifter提升效率:
# 先安装依赖:pip install swifter import swifter # 自动并行执行分词 dataset['tokenized'] = dataset['comment'].swifter.apply(nltk.word_tokenize)
如果不想安装额外依赖,可提前加载分词模型减少重复开销:
# 提前实例化分词器,避免运行时重复加载 tokenizer = nltk.tokenize.word_tokenize dataset['tokenized'] = dataset['comment'].apply(tokenizer)
内容的提问来源于stack exchange,提问作者Sefa Kalkan
相关产品推荐
相关产品推荐

