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

如何在PySpark数据框列中将NaN替换为0

PySpark替换NaN值为0的实现方案

PySpark有完全对标pandas fillna的原生实现,也支持通过withColumn自定义逻辑完成替换,两种常用方案如下:

方案1:使用原生fillna方法(最简便)

这是官方推荐的标准实现,支持全局替换或指定列替换:

  • 替换所有数值类型列的NaN/Null为0:
df = df.fillna(0)
  • 仅替换指定列的NaN/Null为0:
# 仅对col1、col2两列做替换
df = df.fillna(0, subset=["col1", "col2"])

方案2:通过withColumn实现(灵活性更高)

适合需要对单列做自定义逻辑处理的场景,需要搭配when、条件判断函数使用:

  1. 首先导入依赖函数
from pyspark.sql.functions import when, col, isnan
  1. 只替换单列的NaN值(保留Null值):
df = df.withColumn(
    "目标列名",
    when(isnan(col("目标列名")), 0).otherwise(col("目标列名"))
)
  1. 同时替换单列的NaN和Null值为0:
df = df.withColumn(
    "目标列名",
    when(col("目标列名").isNull() | isnan(col("目标列名")), 0).otherwise(col("目标列名"))
)

补充说明:如果是多列统一替换场景优先选fillna,单列需要结合其他条件做复杂替换时选withColumn方案即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:51:02