运行Python代码提示'numpy.ndarray' object has no attribute 'columns'如何解决?
报错原因与解决方案
错误原因
该报错触发在index = X_train.columns这行代码:你当前的X_train是numpy的ndarray格式,只有pandas DataFrame对象才有columns属性,ndarray本身不存在该属性。不需要额外将DataFrame转换为ndarray格式,scikit-learn的模型训练同时支持DataFrame和ndarray两种输入格式,转成ndarray反而会丢失特征列名信息,才会导致本次报错。
解决方案
你可以根据自己的场景任选以下一种方案修复:
- 方案1:保留训练特征为DataFrame格式
检查你数据集拆分前的代码,删除类似X = 特征df.values的操作,直接用DataFrame格式的特征矩阵做训练集测试集拆分,这样拆分得到的X_train本身就是DataFrame,原有代码不需要修改即可正常运行。 - 方案2:手动传入特征名列表
如果你已经将特征转为了ndarray,且提前留存了特征名的列表(假设变量名为feature_list),直接把设置index的代码替换为:importance = pd.DataFrame({'Importance': rf_tuned.feature_importances_*100}, index = feature_list) - 方案3:将ndarray转回DataFrame
如果你需要把现有X_train转回DataFrame后续使用,可执行以下代码:# 替换feature_list为你实际的特征名列表 X_train = pd.DataFrame(X_train, columns=feature_list) importance = pd.DataFrame({'Importance': rf_tuned.feature_importances_*100}, index = X_train.columns)
内容的提问来源于stack exchange,提问作者Berk Akyıldız
相关产品推荐
相关产品推荐

