合并特征选择方法时遇numpy.int64不可迭代TypeError的解决方法
修复TypeError: argument of type 'numpy.int64' is not iterable错误
这个错误的核心原因是:selected_features_pca、selected_features_ig或selected_features_lasso中的某一个不是可迭代的集合(比如列表、数组),而是单个的numpy.int64数值。在get_true_false函数里执行feature in selected_features时,Python无法判断字符串类型的特征名是否存在于单个整数中,因此抛出该错误。
修复步骤:
排查变量类型
打印三个变量的类型和内容,确认哪个是单个数值:print(type(selected_features_pca), selected_features_pca) print(type(selected_features_ig), selected_features_ig) print(type(selected_features_lasso), selected_features_lasso)如果输出显示某变量类型为
<class 'numpy.int64'>,说明它只存储了单个特征的索引,而非特征名/索引的可迭代集合。将单个数值转为可迭代集合
- 如果变量存储的是特征索引:
把单个索引转成列表,再映射到对应的特征名:# 以selected_features_pca为例 if isinstance(selected_features_pca, np.int64): selected_features_pca = [features[selected_features_pca]] - 如果变量存储的是特征名但意外变成单个值:
直接将其包装为列表:if isinstance(selected_features_pca, str): selected_features_pca = [selected_features_pca]
- 如果变量存储的是特征索引:
给函数加容错处理(可选)
修改get_true_false函数,自动处理非可迭代输入,避免后续再出现类似问题:def get_true_false(selected_features, features): selected_t_f = [] # 处理单个值的情况,统一转为列表 if not hasattr(selected_features, '__iter__') or isinstance(selected_features, (str, np.str_)): selected_features = [selected_features] # 简化判断逻辑 for feature in features: selected_t_f.append(feature in selected_features) return selected_t_f
额外注意
要确保selected_features_*存储的内容和features中的元素类型一致:如果features是特征名字符串列表,那selected_features_*也应该是特征名字符串的集合,而不是索引数值。如果是索引,需要先做转换:
# 处理索引数组的情况 selected_features_lasso = [features[idx] for idx in selected_features_lasso]
内容的提问来源于stack exchange,提问作者nadia
相关产品推荐
相关产品推荐

