Ошибка типа преобразование из фрейма данных pandas в массив numpy

#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 для получения оценок за соответствующие функции.

Как мне это отладить? Спасибо.

ошибка преобразования панд в numpy для смешанных типов

Комментарии:

1. Этот фрагмент кода отлично работает для меня (pandas 1.3.2). Какой код выдает эту ошибку? Не могли бы вы опубликовать полную трассировку стека, а не только окончательное сообщение об ошибке?

2. Я добавил изображение, на котором показана полная трассировка стека. моя версия pandas-1.1.3, а python-3.8. Я начал использовать python 3.8 (вместо 3.9) ранее для обеспечения совместимости с Tensorflow. Я запустил код в записной книжке Kaggle, и он выдает ошибку. Однако код работает в Google colab.

3. Я обновил свою версию python, и ошибка исчезла.