【发布时间】:2020-09-08 12:22:06
【问题描述】:
我正在尝试为数据框中的某些数据实现分类朴素贝叶斯分类器。我的数据框有 173 行和 38 列。这些列代表分类特征,例如学位(例如机械工程)和类型(例如理学硕士)。还有许多其他列,列的数量/种类可以根据数据框而变化(例如,一个人可能在各种学科中拥有多种类型的学位或根本没有。这表示为 degree1,degree2 ...)。由于列的可变性,我想在使用序数编码器时向我的数据帧发送一个变量。有问题的代码如下:
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,如果问题所在)的变量的帮助将不胜感激。
谢谢, 加里
【问题讨论】:
标签: python pandas scikit-learn naivebayes