Как заменить значения столбца с помощью метода replace () при использовании словаря? - PullRequest
0 голосов
/ 16 апреля 2019

При замене значений столбца в df методом замены, как мы можем использовать словарь, чтобы сделать то же самое. У меня проблемы с синтаксисом.

   person = spark.createDataFrame([
    (0, "Bill Chambers", 0, [100]),
    (1, "Matei Zaharia", 1, [500, 250, 100]),
    (2, "Michael Armbrust", 1, [250, 100]),
    (1,'Adam',4,[200])])\
    .toDF("id", "name", "graduate_program", "spark_status")

diz={'Bill Chambers':'ABC','Adam':'DEF'}

I saw that the syntax is:
person.replace(diz,1,'name')

Какое значение 1 здесь в аргументах?

1 Ответ

0 голосов
/ 17 апреля 2019

Прежде всего, я рекомендую вам проверить pyspark документацию и найти replace(to_replace, value=<no value>, subset=None) определение функции.

Вы передаете словарь diz с парами ключ / значение, ииз-за того, что это значение 1 будет игнорироваться в вашем случае, таким образом, вы получите следующий результат:

>>> person.replace(diz,1,'name').show()
+---+----------------+----------------+---------------+
| id|            name|graduate_program|   spark_status|
+---+----------------+----------------+---------------+
|  0|             ABC|               0|          [100]|
|  1|   Matei Zaharia|               1|[500, 250, 100]|
|  2|Michael Armbrust|               1|     [250, 100]|
|  1|             DEF|               4|          [200]|
+---+----------------+----------------+---------------+

Обратите внимание, что в вашем столбце использования только name, который вы указали как subset, будетзатронут, и вы можете четко видеть, что ваши пары словаря key/value были использованы как to_replace/value.

Теперь, если вы хотите проверить, как должен работать аргумент значения, проверьте этот пример:

>>> person.replace(['Adam', 'Bill Chambers'],['Bob', 'Omar'],'name').show()
+---+----------------+----------------+---------------+
| id|            name|graduate_program|   spark_status|
+---+----------------+----------------+---------------+
|  0|            Omar|               0|          [100]|
|  1|   Matei Zaharia|               1|[500, 250, 100]|
|  2|Michael Armbrust|               1|     [250, 100]|
|  1|             Bob|               4|          [200]|
+---+----------------+----------------+---------------+

Примечание Если вы хотите указать другой список to_replace / value для двух столбцов, проверьте следующее использование dataframe.replace():

>>> person.replace([1, 0],[9, 5],['id', 'graduate_program']).show()
+---+----------------+----------------+---------------+
| id|            name|graduate_program|   spark_status|
+---+----------------+----------------+---------------+
|  5|   Bill Chambers|               5|          [100]|
|  9|   Matei Zaharia|               9|[500, 250, 100]|
|  2|Michael Armbrust|               9|     [250, 100]|
|  9|            Adam|               4|          [200]|
+---+----------------+----------------+---------------+

В предыдущем примере мы нацелены на двато же самое значение набрало (int) столбцы [id, graduate_program] и заставило заменить все единицы на 9, а все нули заменить на 5.

Надеюсь, это ответит на ваш вопрос

...