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

使用MultinomialNB处理CSV时出现TypeError: string indices must be integers如何修复

问题修复方案

错误原因

你当前触发报错的核心问题是Pandas DataFrame的遍历方式错误:直接写for row in dataset时,遍历返回的是每列的列名字符串,而非行数据,因此你尝试用row['Text']对字符串做索引时就会触发TypeError: string indices must be integers。

除此之外你的代码还存在3处逻辑问题:

  • CountVectorizer没有先拟合(fit)语料生成词汇表,直接调用transform会报错
  • MultinomialNB模型没有提前使用标注好的训练数据拟合,无法直接执行预测
  • 循环内直接给dataset['Type']赋值会覆盖整个列的内容,无法实现逐行写入预测结果的需求

修复代码

Pandas支持向量化操作,不需要写循环遍历每行,直接批量处理整列数据即可,修复后代码如下:

from sklearn.naive_bayes import MultinomialNB
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer

# 读取数据
dataset = pd.read_csv("Test.csv", encoding='latin-1')

# 初始化特征提取器和分类器
cv = CountVectorizer()
clf = MultinomialNB()

# --------------------------
# 注意:此处需要补充你的训练逻辑,你需要有标注好的训练数据先拟合cv和clf
# 示例训练逻辑(替换为你自己的训练数据):
# X_train = cv.fit_transform(训练数据的文本列)
# y_train = 训练数据的标注列
# clf.fit(X_train, y_train)
# --------------------------

# 批量预测测试集文本类型
X_test = cv.transform(dataset['Text'])
dataset['Type'] = clf.predict(X_test)

# 保存结果到新文件
dataset.to_csv("Test_with_Type.csv", index=False, encoding='latin-1')

如果你确实需要逐行遍历(不推荐,效率远低于向量化操作),可以改用iterrows()方法遍历,示例如下:

pred_list = []
for idx, row in dataset.iterrows():
    text = row['Text']
    data = cv.transform([text])
    pred_list.append(clf.predict(data)[0])
dataset['Type'] = pred_list

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:24:05