Ganti semua nilai numerik dalam bingkai data pyspark dengan nilai konstan

12

Pertimbangkan kerangka data pyspark yang terdiri dari elemen 'nol' dan elemen numerik. Secara umum, elemen numerik memiliki nilai yang berbeda. Bagaimana mungkin untuk mengganti semua nilai numerik dari dataframe dengan nilai numerik yang konstan (misalnya dengan nilai 1)? Terima kasih sebelumnya!

Contoh untuk kerangka data pyspark:

c1c2c310,0411.352-1nkamull-1.23nkamull1.2nkamull

Hasilnya harus:

c1c2c3111121nkamull13nkamull1nkamull
hanya kita
sumber
Selamat datang di SO! Bisakah Anda memposting beberapa data dan / atau contoh kode sehingga kami dapat membantu Anda dengan lebih baik?
Stereo

Jawaban:

8

Menggunakan litakan mengonversi semua nilai kolom ke nilai yang diberikan.

Untuk melakukannya hanya untuk nilai-nilai dataframe yang bukan nol, Anda harus memfilter nilai-nilai yang bukan nol dari setiap kolom dan mengganti nilai Anda. whendapat membantu Anda mencapai ini.

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

Ini akan menghasilkan:

c1c2c3111121nkamull13nkamull1nkamull

Juga, jika Anda ingin mengganti nilai-nilai nol itu dengan beberapa nilai lain juga, Anda dapat menggunakan otherwisedalam kombinasi dengan when. Katakanlah Anda ingin menyalahkan di 0sana:

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

Ini akan menghasilkan:

c1c2c3111121013010
Santoshi M
sumber
7

Sesuai masalah Anda, saya pikir itu akan lebih mudah untuk digunakan menyala . Coba ini-

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

Semoga ini bisa membantu!

Abhishek Jaiswal
sumber
2

Ini akan lebih mudah jika Anda memiliki banyak kolom:

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
sumber