如何在PySpark DataFrame中将负值和NaN值替换为0
PySpark DataFrame 负值/NaN统一替换为0的正确实现
报错原因
df[df < 0] = 0是Pandas DataFrame的布尔索引赋值语法,PySpark DataFrame不支持该操作模式,因此会触发运行错误。
实现代码
前置依赖
需要先导入PySpark SQL的工具函数:
from pyspark.sql.functions import when, isnan, col
方案1:批量处理所有整数类型列
自动识别DataFrame中所有整数类型的列统一做替换:
# 筛选所有整数类型列,可根据实际场景调整支持的数值类型 int_cols = [c for c, dtype in df.dtypes if dtype in ("int", "bigint", "smallint", "tinyint")] # 逐列做值替换:小于0或为NaN则替换为0,否则保留原值 for column in int_cols: df = df.withColumn( column, when((col(column) < 0) | isnan(col(column)), 0).otherwise(col(column)) ) # 可选补充:如果需要同时处理空值(Null),添加下方代码 df = df.fillna(0, subset=int_cols)
方案2:仅处理指定列
如果只需要替换特定几个列的值,直接自定义列列表即可:
# 替换为你实际需要处理的列名 target_cols = ["age", "score", "count"] for column in target_cols: df = df.withColumn( column, when((col(column) < 0) | isnan(col(column)), 0).otherwise(col(column)) ) df = df.fillna(0, subset=target_cols)
内容的提问来源于stack exchange,提问作者datatatata
相关产品推荐
相关产品推荐

