如何在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、条件判断函数使用:
- 首先导入依赖函数
from pyspark.sql.functions import when, col, isnan
- 只替换单列的NaN值(保留Null值):
df = df.withColumn( "目标列名", when(isnan(col("目标列名")), 0).otherwise(col("目标列名")) )
- 同时替换单列的NaN和Null值为0:
df = df.withColumn( "目标列名", when(col("目标列名").isNull() | isnan(col("目标列名")), 0).otherwise(col("目标列名")) )
补充说明:如果是多列统一替换场景优先选fillna,单列需要结合其他条件做复杂替换时选withColumn方案即可。
内容的提问来源于stack exchange,提问作者datatatata
相关产品推荐
相关产品推荐

