我正试图为我在一个数据框中的一些数据实现一个分类天真贝叶斯分类器。 我的数据框架有173行,38列,其中列代表分类特征,如学位(如:机械工程)和类型(如:硕士)。 这些列代表分类特征,如学位(如机械工程)和类型(如理学硕士)。 还有很多其他的列,列的数量和种类可以根据数据框架而改变(例如,一个人可能在不同的科目中拥有多种类型的学位,或者根本没有。 这表示为 degree1, degree2 ...)。) 由于列的变化,我想在使用ordinal encoder时向数据框架发送一个变量。 有问题的代码如下。
def catEnconder(dataframe, *args):
enc = OrdinalEncoder()
enc_results = OrdinalEncoder()
enc.fit([dataframe.columns.astype(str)])
foo = "\'degree1\', \'type1\'"
#dfOE = enc.transform(dataframe[['degree1', 'type1']].astype(str)) #This line works perfectly
dfOE = enc.transform(dataframe[[foo]].astype(str)) #This line fails. The error appears to be
#"None of [Index([''degree1', 'type1''], dtype='object')] are in the [columns]" (although they definitely are)
dfOE = enc.transform(dataframe[dataframe.columns.astype(str)]) #This line fails. Error:
#Found unknown categories ['6D7', '6X1', ....] (these values represent departments that are within the dataframe)
#Below works perfectly
if args[0] == True:
results = enc_results.fit_transform(dataframe[['DecisionDesc_en']].astype(str))
return dfOE, results
else:
return dfOE
下半部分的代码可以正常工作 我的结果数组的形状是173 x 1。问题是我需要我的dfOE数据框架是173 x 38,但似乎不能让OrdinalEncoder接受我的数据框架输入。 任何关于如何将我的列作为一个变量到我的数据框架(或OrdinalEncoder,如果这就是问题所在)的帮助将是非常感激的。
谢谢,Gary
呃,请原谅我的狂暴愚蠢。 我想我有一部分人喜欢把事情搞得过于复杂。 简单的解决方法很简单。
dfOE = enc.fit_transform(dataframe.astype(str))
-加里