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

Pandas/Sklearn电影类型预测代码报错求助:TypeError与AttributeError

解决Pandas/Sklearn电影类型预测代码的两类报错

让我来帮你排查这两个报错的问题,其实核心都是混淆了Pandas DataFrame和NumPy数组的操作语法,咱们一步步拆解解决:

报错1:TypeError: unhashable type: 'slice'

问题根源

你用predicted_genre = data[["Genre"]]得到的是一个Pandas DataFrame对象,而[:, np.newaxis]是NumPy数组专属的维度扩展语法,DataFrame不支持这种切片方式,所以触发了类型错误。

修复方案

直接把DataFrame转换成NumPy数组后再扩展维度,用.values或者.to_numpy()都可以:

# 把DataFrame转成NumPy数组后再增加维度
predicted_genre = data[["Genre"]].values[:, np.newaxis]

或者用更直观的reshape方法:

predicted_genre = data[["Genre"]].values.reshape(-1, 1)

报错2:AttributeError: 'DataFrame' object has no attribute 'flatten'

问题根源

删除那行维度扩展代码后,predicted_genre仍然是DataFrame对象,而flatten()是NumPy数组的方法,DataFrame根本没有这个属性,自然会报错。

修复方案

先把DataFrame转换成NumPy数组,再调用扁平化方法。你其实已经在model.fit里用到了.values.ravel(),这里可以沿用同样的思路:

# 先转成NumPy数组再扁平化
accuracy = accuracy_score(predicted_genre.values.flatten(), predicted_classes)
# 或者用ravel(),效果一样
accuracy = accuracy_score(predicted_genre.values.ravel(), predicted_classes)

修正后的完整代码(附优化点)

我还帮你优化了几个容易踩坑的细节,比如不需要手动添加截距项(Sklearn的LogisticRegression默认会处理),以及补全了遗漏的accuracy_score导入:

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score  # 必须导入这个模块!

# 读取数据集
data = pd.read_csv('movies.csv', sep=',')

# 提取特征列
feature_cols = ["marri", "huh", "hous", "mother", "nice", "home", "miss", "play", "happi", "write",
                "wouldnt","power", "captain", "ship", "weve", "move", "ship", "system", "world", "command", "three"]
X = data[feature_cols].values

# 提取目标变量(转成NumPy数组,方便后续操作)
y = data["Genre"].values

# 初始化并训练模型
model = LogisticRegression()
model.fit(X, y.ravel())  # ravel()确保目标变量是一维数组

# 获取模型参数并预测
parameters = model.coef_
predicted_classes = model.predict(X)

# 计算准确率
accuracy = accuracy_score(y, predicted_classes)
print(f"模型在训练集上的准确率: {accuracy:.2f}")

关键优化说明:

  1. 去掉手动加截距:LogisticRegression的fit_intercept参数默认是True,会自动为特征矩阵添加截距项,不需要你手动用np.c_拼接全1数组。
  2. 简化目标变量处理:用data["Genre"](单括号)得到Series,再转成NumPy数组,比双括号的DataFrame更适合作为模型的目标变量。
  3. 补全必要导入:原代码遗漏了accuracy_score的导入,这也是潜在的报错点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:17:58