scikit-learn中Bag of Words用CountVectorizer报错np.nan无效文档如何解决
问题解决方法
第一步:解决空值报错+切片警告问题
你触发切片警告的原因是train_df['TEXT']本身可能是原DataFrame的一个视图切片,直接用inplace参数修改会触发pandas的安全警告。你可以用以下两种方式二选一处理空值,完全避开警告:
- 方式1:直接生成删除空值后的新列传入向量化器,不修改原DataFrame
提示:scikit-learn 1.0以上版本已经弃用# 直接过滤掉TEXT列为空的行,不修改原train_df valid_text = train_df['TEXT'].dropna() text_vectorizer = CountVectorizer(min_df=3) train_text_feature_onehotCoding = text_vectorizer.fit_transform(valid_text) train_text_features = text_vectorizer.get_feature_names_out()get_feature_names(),建议替换为get_feature_names_out()避免后续版本兼容报错 - 方式2:如果需要保留处理后的DataFrame,显式声明生成副本再修改
# 显式copy生成新的DataFrame,避免视图修改警告 train_df = train_df.dropna(subset=['TEXT']).copy() text_vectorizer = CountVectorizer(min_df=3) train_text_feature_onehotCoding = text_vectorizer.fit_transform(train_df['TEXT']) train_text_features = text_vectorizer.get_feature_names_out()
可选补充:兼容非字符串类型内容
如果后续还出现类型报错,可以在向量化前把所有文本转成字符串格式,进一步适配CountVectorizer的输入要求:
valid_text = train_df['TEXT'].fillna('').astype(str)
这个写法会把空值替换为空字符串,也可以避免np.nan报错,适合不想删除样本的场景。
内容的提问来源于stack exchange,提问作者loyala
相关产品推荐
相关产品推荐

