未使用PySpark中的with列条件替换空值

2024-10-03 06:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个PySpark代码,用于设置这样一个条件:如果给定列中存在null值,那么它会将“Yes”附加到另一列,否则为“No”

data = data.withColumn('Coupon_code',when((data.coupon ==""),"No coupon").otherwise("coupon"))

此处的条件是,如果“优惠券”列中有空值,则在优惠券代码列中附加“无优惠券”,否则为“优惠券”

上述逻辑的问题在于它没有检测到空值并用“优惠券”填充每个条目

我尝试使用isisnull()subset,但没有效果

data=data.withColumn(‘优惠券编码’),当(data.fillna(“无优惠券”,子集[‘优惠券’))时。否则(“优惠券”))

对于is null(),我得到的错误是column is not callable。请告诉我哪里出了问题

样本数据:

I/p:

Coupon
null
null
null
null
H45X
E4R
null

预期o/p:

Coupon  Coupon_code
null     No Coupon
null     No Coupon
null     No Coupon
null     No Coupon
H45X     coupon
E4R      coupon
null     No Coupon

即使计数也能工作,但同样的方法也无法替代它

data.where(col("coupon").isNull()).count()

output: 9064

Tags: no代码dataiscode条件nullpyspark
1条回答
网友
1楼 · 发布于 2024-10-03 06:23:02

如果下面的代码适合您,请尝试一下?它应该捕获列优惠券为null或为空字符串的两种情况

import pyspark.sql.functions as F

data = data.withColumn('Coupon_code',
    F.when(
        F.col('coupon').isNull() | (F.col('coupon') == F.lit('')),
        "No coupon"
    ).otherwise("coupon")
)

相关问题 更多 >