Заменить все числовые значения в фрейме данных pyspark на постоянное значение

12

Рассмотрим фрейм данных pyspark, состоящий из нулевых и числовых элементов. Как правило, числовые элементы имеют разные значения. Как можно заменить все числовые значения кадра данных постоянным числовым значением (например, значением 1)? Заранее спасибо!

Пример для фрейма данных pyspark:

c1c2c310.0411.3521null1.23null1.2null

Результат должен быть:

c1c2c3111121null13null1null
только мы
источник
Добро пожаловать на ТАК! Не могли бы вы опубликовать некоторые данные и / или пример кода, чтобы мы могли лучше вам помочь?
Стерео

Ответы:

8

Использование litбудет преобразовывать все значения столбца в заданное значение.

Чтобы сделать это только для ненулевых значений dataframe, вам нужно будет отфильтровать ненулевые значения каждого столбца и заменить свое значение. whenможет помочь вам достичь этого.

from pyspark.sql.functions import when   

df.withColumn('c1', when(df.c1.isNotNull(), 1))
  .withColumn('c2', when(df.c2.isNotNull(), 1))
  .withColumn('c3', when(df.c3.isNotNull(), 1))

Это приведет к:

c1c2c3111121null13null1null

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

from pyspark.sql.functions import when   

df.withColumn('c1', when(df.c1.isNotNull(), 1).otherwise(0))
  .withColumn('c2', when(df.c2.isNotNull(), 1).otherwise(0))
  .withColumn('c3', when(df.c3.isNotNull(), 1).otherwise(0))

Это приведет к:

c1c2c3111121013010
Сантоши М
источник
7

В соответствии с вашей проблемой, я думаю , что может быть проще использовать освещено . Попробуй это-

from pyspark.sql.functions import lit
new_df = df.withColumn('column_name', lit(1))

Надеюсь, поможет!

Абхишек Джайсвал
источник
2

Это было бы проще, если у вас есть несколько столбцов:

from pyspark.sql.functions import when   
cols = df.columns # list of all columns
for col in cols:
    df= df.withColumn(col, when(df[col]>0,1).otherwise(0))
М. Машаехи
источник