You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark:基于其他列的空值创建新列的实现方法

PySpark 基于列空值创建新列的实现方案

假设你的输入DataFrame包含多列,需要根据这些列的空值情况生成新列(比如标记缺失列、判断是否存在空值等),以下是对应实现方法:

1. 创建标记列:判断是否存在任意空值

如果只需标记该行是否有任意列为空,可结合when、any和isNull实现:

from pyspark.sql import functions as F

# 指定需要检查空值的列
check_columns = ["Name", "Age", "City"]

# 新增has_missing列:有任意空值标记为1,否则为0
df = df.withColumn(
    "has_missing",
    F.when(F.any(F.col(c).isNull() for c in check_columns), 1).otherwise(0)
)

2. 创建列:列出所有缺失的列名

如果需要将该行所有空值的列名拼接成字符串(如示例输出的需求),可使用concat_ws配合条件判断:

from pyspark.sql import functions as F

check_columns = ["Name", "Age", "City"]

# 生成每个列的空值判断表达式:为空则返回列名,否则返回空字符串
missing_cols_expr = [
    F.when(F.col(c).isNull(), F.lit(c)).otherwise(F.lit("")) 
    for c in check_columns
]

# 拼接非空的列名,无空值时显示"None"
df = df.withColumn(
    "Missing_Columns",
    F.when(
        F.any(F.col(c).isNull() for c in check_columns),
        F.concat_ws(", ", *missing_cols_expr)
    ).otherwise(F.lit("None"))
)

3. 按特定空值组合生成自定义标记

如果需要根据不同的空值组合生成对应描述,可通过多条件when实现:

from pyspark.sql import functions as F

df = df.withColumn(
    "missing_flag",
    F.when(F.col("Age").isNull(), "Age缺失")
      .when(F.col("Name").isNull() & F.col("City").isNull(), "姓名和城市缺失")
      .when(F.col("Name").isNull(), "姓名缺失")
      .when(F.col("City").isNull(), "城市缺失")
      .otherwise("无缺失")
)

执行完上述代码后,用df.show()即可查看转换后的结果是否符合预期。

内容的提问来源于stack exchange,提问作者Himanshu Gaur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:05:25