Я пытаюсь реализовать категориальный наивный байесовский классификатор для некоторых данных, которые у меня есть в кадре данных. В моем фрейме данных 173 строки и 38 столбцов. Столбцы представляют категориальные характеристики, такие как степень (например, машиностроение) и тип (например, магистр наук). Есть много других столбцов, и количество/разнообразие столбцов может меняться в зависимости от фрейма данных (например, у человека может быть несколько типов степеней по разным предметам или вообще ни одного. Это представлено как степень1, степень2...). Из-за изменчивости столбцов я хочу отправить переменную в свой кадр данных при использовании порядкового кодировщика. Проблемный код ниже:
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, если проблема именно в этом).
Спасибо, Гэри