Thay thế tất cả các giá trị số trong khung dữ liệu pyspark bằng một giá trị không đổi


12

Hãy xem xét một khung dữ liệu pyspark bao gồm các phần tử 'null' và các phần tử số. Nói chung, các phần tử số có các giá trị khác nhau. Làm thế nào có thể thay thế tất cả các giá trị số của khung dữ liệu bằng một giá trị số không đổi (ví dụ bằng giá trị 1)? Cảm ơn trước!

Ví dụ cho khung dữ liệu pyspark: started

c1c2c310.0411.3521null1.23null1.2null

Kết quả sẽ là:

c1c2c3111121null13null1null

Chào mừng đến với SO! Bạn có thể đăng một số dữ liệu và / hoặc ví dụ mã để chúng tôi có thể giúp bạn tốt hơn không?
Âm thanh nổi

Câu trả lời:


8

Sử dụng litsẽ chuyển đổi tất cả các giá trị của cột thành giá trị nhất định.

Để làm điều đó chỉ với các giá trị không null của khung dữ liệu, bạn sẽ phải lọc các giá trị không null của mỗi cột và thay thế giá trị của bạn. whencó thể giúp bạn đạt được điều này.

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

Điều này sẽ dẫn đến:

c1c2c3111121null13null1null

Ngoài ra, nếu bạn muốn thay thế các giá trị null đó bằng một số giá trị khác, bạn có thể sử dụng otherwisekết hợp với when. Giả sử bạn muốn áp đặt 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))

Điều này sẽ dẫn đến:

c1c2c3111121013010

7

Theo vấn đề của bạn, tôi nghĩ rằng nó có thể được dễ dàng hơn để sử dụng thắp sáng . Thử đi-

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

Hy vọng nó giúp!


2

Điều này sẽ dễ dàng hơn nếu bạn có nhiều cột:

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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.