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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:12:02