用恒定值替换pyspark数据框中的所有数值


12

考虑一个由'null'元素和数字元素组成的pyspark数据帧。通常,数字元素具有不同的值。如何用一个恒定的数值(例如值1)替换数据框的所有数值?提前致谢!

pyspark数据框的示例:

c1c2c310.0411.3521null1.23null1.2null

结果应为:

c1c2c3111121null13null1null

欢迎来到SO!您能否发布一些数据和/或代码示例,以便我们更好地帮助您?
立体声

Answers:


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

7

根据您的问题,我认为使用lit可能会更容易。尝试这个-

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

希望能帮助到你!


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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.