Показать полную трассировку стека и некоторый воспроизводимый код и данные, чтобы мы могли проверить это. Это кажется легко решаемой проблемой и может быть сделано, если вы предоставите, как вы собираетесь ее решить.
Кроме этого, здесь есть несколько проблем:
1) OneHotEncoder
нельзя использовать непосредственно для строк. Сначала вам нужно преобразовать строковые объекты в целые числа (возможно, используя LabelEncoder
)
2) Однократное кодирование преобразует ваш единственный столбец в несколько столбцов (в зависимости от уникальных значений в них), поэтому вы не можете назначить его непосредственно одному столбцу вашего фрейма данных.
3) Если вы можете успешно преобразовать, используя OneHotEncoder
, даже тогда возвращаемые данные являются разреженной матрицей, что опять-таки не подходит для фрейма данных pandas.
4) Вы назначаете одни и те же данные одному и тому же кадру данных дважды. Оказавшись внутри метода, вы делаете это:
repair[field]=oe.transform(repair[field])
И затем вы вызываете метод следующим образом:
repair['SALES_ORG_ID']=OneHotEncoder(repair,'SALES_ORG_ID')
Это не обязательно.
5) Сначала вы вводите (или пытаетесь вписать) все данные в field
. Таким образом, oe.classes_ будет содержать все уникальные категории. Итак, после этого делаем
repair[field] = repair[field].map(lambda s: 'Other' if s not in oe.classes_ else s)
не имеет никакого смысла. Можете ли вы показать, как вы делаете это успешно для labelencoder, как вы сказали в вопросе? Теперь, даже если вы как-то успешно это сделаете, следующая строка:
repair[field]=oe.transform(repair[field])
выдаст ошибку, потому что «Other» - это строка, которую OneHotEncoder не обрабатывает. Вам нужно добавить дополнительную категорию ('Other'
в этом случае, прежде чем подгонять данные.
6) Я бы посоветовал вам сохранить трансформаторы, используя Joblib или Pickle вместо Numpy.
Примечание : Как уже упоминалось в журнале изменений здесь , начиная со следующей версии (0.20.0), OneHotEncoder сможет обрабатывать строки в переданных данных:
Строка или панды. Категориальные столбцы теперь можно кодировать с помощью OneHotEncoder
или OrdinalEncoder
.