OneHotEncoding: работает в одном фрейме данных, не работает в очень, очень похожем фрейме данных (pyspark)

#python #dataframe #apache-spark #pyspark #one-hot-encoding

#python #фрейм данных #apache-spark #pyspark #one-hot-encoding

Вопрос:

Я применяю функцию OneHotEncoding к двум очень похожим фреймам данных. Первый фрейм данных выглядит следующим образом: введите описание изображения здесь

Когда я применяю одно горячее кодирование, все работает нормально: введите описание изображения здесь

Однако, когда я применяю точно такую же функцию к этому другому, но очень похожему фрейму данных: введите описание изображения здесь

Возникает следующая ошибка:

введите описание изображения здесь

Я не понимаю, почему это происходит, потому что фреймы данных 1 и 2 были извлечены из предыдущего фрейма данных (они работают как обучающий и тестовый df для приложения машинного обучения). Оба являются фреймами данных pyspark.sql. Кто-нибудь может мне помочь?

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

1. Вы уверены, что столбец «район» содержит только целые числа во втором фрейме данных?

Ответ №1:

Как указано в ошибке, вы не можете отсортировать список, содержащий None целые числа и. Возможно null , в вашей колонке есть буква «а», которая приводит categories.sort() к сбою строки.

Если вы хотите сделать ML с помощью Spark, я бы посоветовал использовать pyspark.ml пакет, вместо того чтобы писать свой собственный одноразовый кодировщик. Например, смотрите здесь .

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

1. Я даже не заметил этого, потому что предполагалось, что эти данные были обработаны ранее и не должны были иметь каких-либо пропущенных значений… Спасибо!

2. Вы уверены, что это проблема здесь? Я не понимаю, как значение null в столбце A может привести к сбою функции .sort() для значений из столбца B.

3. @couka может быть, где-то еще в столбце B.

4. Я применил эту строку ex_2 = ex_2.na.fill(0), и теперь все работает нормально. Спасибо вам обоим!!

5. @mck Да, это моя точка зрения. Спасибо за обновление ответа.