แทนที่ค่าตัวเลขทั้งหมดใน pyspark dataframe ด้วยค่าคงที่


12

พิจารณา pyspark dataframe ซึ่งประกอบด้วยองค์ประกอบ 'null' และองค์ประกอบตัวเลข โดยทั่วไปองค์ประกอบตัวเลขมีค่าแตกต่างกัน เป็นไปได้อย่างไรที่จะแทนที่ค่าตัวเลขทั้งหมดของ dataframe ด้วยค่าตัวเลขคงที่ (ตัวอย่างเช่นโดยค่า 1) ขอบคุณล่วงหน้า!

ตัวอย่างสำหรับ pyspark dataframe:

c1c2c310.0411.352-1nยูล.ล.-1.23nยูล.ล.1.2nยูล.ล.

ผลลัพธ์ควรเป็น:

c1c2c3111121nยูล.ล.13nยูล.ล.1nยูล.ล.

ยินดีต้อนรับสู่ SO! คุณสามารถโพสต์ข้อมูลและ / หรือตัวอย่างรหัสเพื่อให้เราช่วยเหลือคุณได้ดีขึ้นหรือไม่
สเตอริโอ

คำตอบ:


8

เป็นต่อปัญหาของคุณผมคิดว่ามันอาจจะง่ายต่อการใช้ไฟ ลองสิ่งนี้ -

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

หวังว่ามันจะช่วย!


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

สิ่งนี้จะส่งผลให้:

c1c2c3111121nยูล.ล.13nยูล.ล.1nยูล.ล.

นอกจากนี้ถ้าคุณต้องการที่จะเปลี่ยนค่า null ผู้ที่มีค่าอื่น ๆ บางเกินไปคุณสามารถใช้ร่วมกับ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))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.