#pandas #dataframe #numpy #encode
Вопрос:
Я получаю ошибку типа после преобразования фрейма данных pandas в массив numpy (после использования pd.get_dummies
или путем создания фиктивных переменных из фрейма данных с помощью df.apply
функции), если столбцы имеют смешанные типы int
, str
и float
. Я не получаю этих ошибок , если только использую смешанные типы int
, и str
.
код:
df = pd.DataFrame({'a':[1,2]*2, 'b':['m','f']*2, 'c':[0.2, .1, .3, .5]})
dfd = pd.get_dummies(df, drop_first=True, dtype=int)
dfd.values
Ошибка: TypeError: '<' not supported between instances of 'str' and 'int'
Со мной тоже происходит ошибка dfd.to_numpy()
. Даже если я преобразую dfd
int
float
фрейм данных в значения или с помощью df.astype
, dfd.to_numpy()
все равно возникает ошибка. Я получаю ошибку, даже если выбираю только столбцы, которые не были изменены df
.
Цель: Я кодирую категориальные функции фрейма данных в одну горячую кодировку, а затем хочу использовать SelectKBest
с score_func=mutual_info_classif
, чтобы выбрать некоторые функции. Ошибка, вызванная кодом после подгонки SelectKBest
, такая же, как и ошибка, вызванная, dfd.to_numpy()
и, следовательно, я предполагаю, что ошибка возникает при SelectKBest
попытке преобразовать фрейм данных в numpy. Кроме того, работает просто использование mutual_info_classif
для получения оценок за соответствующие функции.
Как мне это отладить? Спасибо.
Комментарии:
1. Этот фрагмент кода отлично работает для меня (pandas 1.3.2). Какой код выдает эту ошибку? Не могли бы вы опубликовать полную трассировку стека, а не только окончательное сообщение об ошибке?
2. Я добавил изображение, на котором показана полная трассировка стека. моя версия pandas-1.1.3, а python-3.8. Я начал использовать python 3.8 (вместо 3.9) ранее для обеспечения совместимости с Tensorflow. Я запустил код в записной книжке Kaggle, и он выдает ошибку. Однако код работает в Google colab.
3. Я обновил свою версию python, и ошибка исчезла.