Примените StringIndexer к нескольким столбцам в кадре данных PySpark.Python

Программы на Python
Ответить
Anonymous
 Примените StringIndexer к нескольким столбцам в кадре данных PySpark.

Сообщение Anonymous »

У меня есть фрейм данных PySpark

Код: Выделить всё

+-------+--------------+----+----+
|address|          date|name|food|
+-------+--------------+----+----+
|1111111|20151122045510| Yin|gre |
|1111111|20151122045501| Yin|gre |
|1111111|20151122045500| Yln|gra |
|1111112|20151122065832| Yun|ddd |
|1111113|20160101003221| Yan|fdf |
|1111111|20160703045231| Yin|gre |
|1111114|20150419134543| Yin|fdf |
|1111115|20151123174302| Yen|ddd |
|2111115|      20123192| Yen|gre |
+-------+--------------+----+----+
который я хочу преобразовать для использования с pyspark.ml. Я могу использовать StringIndexer для преобразования столбца имени в числовую категорию:

Код: Выделить всё

indexer = StringIndexer(inputCol="name", outputCol="name_index").fit(df)
df_ind = indexer.transform(df)
df_ind.show()
+-------+--------------+----+----------+----+
|address|          date|name|name_index|food|
+-------+--------------+----+----------+----+
|1111111|20151122045510| Yin|       0.0|gre |
|1111111|20151122045501| Yin|       0.0|gre |
|1111111|20151122045500| Yln|       2.0|gra |
|1111112|20151122065832| Yun|       4.0|ddd |
|1111113|20160101003221| Yan|       3.0|fdf |
|1111111|20160703045231| Yin|       0.0|gre |
|1111114|20150419134543| Yin|       0.0|fdf |
|1111115|20151123174302| Yen|       1.0|ddd |
|2111115|      20123192| Yen|       1.0|gre |
+-------+--------------+----+----------+----+
Как преобразовать несколько столбцов с помощью StringIndexer (например, имя и еда, каждый со своим собственным StringIndexer) и затем использовать VectorAssembler для создания вектора признаков? Или мне нужно создать StringIndexer для каждого столбца?

** РЕДАКТИРОВАТЬ **: это не обман, потому что мне нужно сделать это программно для несколько фреймов данных с разными именами столбцов. Я не могу использовать VectorIndexer или VectorAssembler, поскольку столбцы не являются числовыми.

** РЕДАКТИРОВАТЬ 2**: Предварительное решение: < /p>

Код: Выделить всё

indexers = [StringIndexer(inputCol=column, outputCol=column+"_index").fit(df).transform(df) for column in df.columns ]
где я теперь создаю список с тремя кадрами данных, каждый из которых идентичен исходному, плюс преобразованный столбец. Теперь мне нужно присоединиться, чтобы сформировать окончательный фрейм данных, но это очень неэффективно.

Подробнее здесь: https://stackoverflow.com/questions/369 ... -dataframe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»