运行机器学习代码报AttributeError:'list'无'drop'属性,错在哪里如何修改
问题诊断
- 核心报错原因:第10行的列筛选代码写法错误,你将pandas读取生成的DataFrame类型的
data变量,错误赋值为了一个Python原生嵌套列表,覆盖了原有值:
列表类型没有pandas提供的# 错误写法:直接生成列表,覆盖了DataFrame data = [["G1", "G2", "G3", "studytime", "failures", "absences"]]drop方法,运行到data.drop()语句时就触发了AttributeError。 - 冗余代码问题:
- 导入的
sklearn.utils.shuffle未在代码中使用,属于无效导入 - 代码末尾重复调用了两次
linear.fit()和linear.score(),属于无意义的重复执行
- 导入的
修复方案
你需要修改列筛选的写法,保留data的DataFrame结构,同时清理冗余代码即可正常运行,修复后的完整代码如下:
import pandas as pd import numpy as np import sklearn from sklearn import linear_model # 读取数据集 data = pd.read_csv("student-mat.csv", sep=";") # 正确写法:从原DataFrame中筛选指定列,仍保留DataFrame格式 data = data[["G1", "G2", "G3", "studytime", "failures", "absences"]] predict = "G3" # 拆分特征和标签,明确标注axis=1兼容性更好 X = np.array(data.drop([predict], axis=1)) y = np.array(data[predict]) x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size = 0.1) linear = linear_model.LinearRegression() linear.fit(x_train, y_train) acc = linear.score(x_test, y_test) print(acc)
内容的提问来源于stack exchange,提问作者Sriniketh Sunder
相关产品推荐
相关产品推荐

