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


12

Розглянемо фрейм даних Pyspark, що складається з 'null' елементів та числових елементів. Взагалі числові елементи мають різні значення. Як можна замінити всі числові значення фрейму даних на постійне числове значення (наприклад, значення 1)? Спасибі заздалегідь!

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

c1c2c310.0411.3521null1.23null1.2null

Результатом має бути:

c1c2c3111121null13null1null

Ласкаво просимо до SO! Чи можете ви розмістити деякі дані та / або приклад коду, щоб ми могли краще допомогти вам?
Стерео

Відповіді:


8

Відповідно до вашої проблеми, я думаю, що може бути простіше використовувати освітлений . Спробуйте це-

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

Сподіваюся, це допомагає!


8

Використання litперетворить усі значення стовпця на задане значення.

Щоб зробити це лише для ненульових значень фрейму даних, вам доведеться фільтрувати ненульові значення кожного стовпця і замінювати своє значення. 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

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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.