Python处理categorical数据时numpy.ndarray无label属性错误如何解决
问题原因
报错已经明确指向问题根源:你赋值给train的X_train本身是numpy数组(numpy.ndarray)类型,不是你预期的Pandas DataFrame,所以无法调用DataFrame才有的.label、.loc、.columns属性/方法。
排查步骤
- 首先执行
print(type(X_train))确认X_train的类型,如果输出是<class 'numpy.ndarray'>就可以验证上述判断 - 再执行
print(X_train.shape)查看数组维度,确认标签列所在的位置:常规结构化数据集通常最后一列/第一列为label列
解决方法
分两种场景选择对应方案:
方案1:保留DataFrame结构(后续需要用到Pandas相关方法时选这个)
回溯生成X_train的代码,删掉多余的.values调用——很多开发者处理数据时会顺手加.values转成numpy数组,忘记后续还要用DataFrame属性。调整后你的原有代码可以正常运行:
# 调整生成X_train的代码后,确保X_train是Pandas DataFrame再执行后续逻辑 train = X_train targets_numpy = train.label.values features_numpy = train.loc[:,train.columns != "label"].values/255 # normalization features_train, features_test, targets_train, targets_test = train_test_split(features_numpy, targets_numpy, test_size = 0.2, random_state = 42)
方案2:直接基于numpy数组操作(不想修改上游生成逻辑时选这个)
如果X_train已经确定是numpy数组,直接用数组切片提取特征和标签即可,假设label为数组最后一列,代码修改如下:
train = X_train # 取最后一列作为标签 targets_numpy = train[:, -1] # 取除最后一列外的所有列做归一化 features_numpy = train[:, :-1]/255 # normalization features_train, features_test, targets_train, targets_test = train_test_split(features_numpy, targets_numpy, test_size = 0.2, random_state = 42)
注:如果你的label不是最后一列,对应调整切片索引即可,比如label是第一列就改成
train[:, 0],特征取train[:, 1:]
内容的提问来源于stack exchange,提问作者TensorflowTryhard
相关产品推荐
相关产品推荐

