我有一个结构如下所示的pandas数据框架
item_condition_id categorybrand_name categoryprice float64shipping categorymain_category categorycategory categorysub_category categoryhashing_feature_aa float64hashing_feature_ab float64
数据的一部分示例:
brand_name shipping main_category categoryTarget 1 Women Tops & Blousesunknown 1 Home Home Décorunknown 0 Women Jewelryunknown 0 Women Other
我使用以下代码将分类(字符串)列转换为数值列。
from sklearn.preprocessing import LabelEncoderle = LabelEncoder()for i in range(len(X)): X.iloc[:,i] = le.fit_transform(X.iloc[:,i])
转换后
brand_name shipping main_category category 0 1 1 3 1 1 0 0 1 0 1 1 1 0 1 2
这按预期工作,但在尝试应用 inverse_transform 以从数值类别获取原始类别时会抛出错误。
for i in range(len(X)): X.iloc[:,i] = le.inverse_transform(X.iloc[:,i])
ValueError: 具有多个元素的数组的真值是模糊的。使用a.any()或a.all()
如何解决我的情况下的这个错误,我的代码有什么问题?
我的目标是使用标签编码器将分类(字符串)特征转换为数值,以便应用 sklearn.feature_selection.SelectKbest.fit_transform(X,y),如果不进行标签编码,这一步骤将失败。
谢谢
回答:
根据你的澄清:你的问题是在循环中覆盖了le的实例,因此它仅在最后一列上进行训练。基于你的代码,我建议将它们放入一个字典中,例如如下所示:
from sklearn.preprocessing import LabelEncoderle = {}for i in range(len(X)): le[i] = LabelEncoder() X.iloc[:,i] = le[i].fit_transform(X.iloc[:,i])# 做一些事情for i in range(len(X)): X.iloc[:,i] = le[i].inverse_transform(X.iloc[:,i])
但如上所述,也请查看 这个。