【问题标题】:Null values not getting replaced using with column condition in PySpark在 PySpark 中使用列条件替换空值
【发布时间】:2020-12-08 10:46:21
【问题描述】:

我编写了一个 PySpark 代码来设置条件,如果给定列中存在空值,则它将“是”附加到另一列,否则为“否”

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

这里的条件是在“优惠券”列上,如果“优惠券”列中有空值,那么它会在 Coupon_code 列中附加“无优惠券”,否则在“优惠券”列中附加“优惠券”

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

我尝试使用 isnull() 和 subset 但无济于事

data = data.withColumn('Coupon_code',when(data.fillna("No coupon", subset["coupon"])).otherwise("coupon"))

for 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

【问题讨论】:

  • 请发布示例数据
  • 您确定缺失值是空字符串 ("") 而不是例如空格 (" ")?
  • @LiamGalbraith 是的,这些是空字符串。都是空/无数据类型
  • 'coupon' 列的 dtype 是字符串

标签: python pandas apache-spark pyspark apache-spark-sql


【解决方案1】:

试试下面的代码是否适合你?它应该捕获列 coupon 为 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")
)

【讨论】:

  • 是的,现在我可以看到无优惠券部分也在填充。知道为什么 isnull() 不能在 df.col.isnull() 上运行它给出错误列的任何想法都不是可调用函数
  • 应该是isNull,而不是isnull。
猜你喜欢
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2019-01-11
  • 2021-02-09
  • 2021-10-25
相关资源
最近更新 更多