用常量值替换 pyspark 数据框中的所有数值

数据挖掘 Python 阿帕奇火花
2021-10-13 03:08:38

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

pyspark 数据框的示例:

c1c2c310.0411.3521null1.23null1.2null

结果应该是:

c1c2c3111121null13null1null

3个回答

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

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

希望能帮助到你!

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

这将导致:

c1c2c3111121nll13nll1nll

此外,如果您也想用其他值替换这些空值,您可以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

如果您有多个列,这会更容易:

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