Zastąp wszystkie wartości liczbowe w ramce danych pyspark stałą wartością

12

Rozważ ramkę danych typu pyspark składającą się z elementów „zerowych” i elementów numerycznych. Zasadniczo elementy liczbowe mają różne wartości. Jak można zastąpić wszystkie wartości liczbowe ramki danych stałą wartością liczbową (na przykład wartością 1)? Z góry dziękuję!

Przykład ramki danych pyspark:

c1c2c310.0411.3521null1.23null1.2null

Wynik powinien być:

c1c2c3111121null13null1null
tylko my
źródło
Witamy w SO! Czy możesz podać jakieś dane i / lub przykład kodu, abyśmy mogli Ci lepiej pomóc?
Stereo

Odpowiedzi:

8

Jeśli chodzi o twój problem, myślę, że może być łatwiejszy w użyciu oświetlony . Spróbuj tego-

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

Mam nadzieję, że to pomoże!

Abhishek Jaiswal
źródło
8

Użycie litspowoduje przekonwertowanie wszystkich wartości kolumny na podaną wartość.

Aby to zrobić tylko dla niepustych wartości ramki danych, należy przefiltrować niepuste wartości każdej kolumny i zastąpić swoją wartość. whenmoże pomóc Ci to osiągnąć.

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))

Spowodowałoby to:

c1c2c3111121null13null1null

Ponadto, jeśli chcesz zastąpić te wartości null innymi wartościami, możesz użyć ich otherwisew połączeniu z when. Powiedzmy, że chcesz 0tam przypisać :

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))

Spowodowałoby to:

c1c2c3111121013010
Santoshi M.
źródło
2

Byłoby łatwiej, jeśli masz wiele kolumn:

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))
M. Mashayekhi
źródło