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

如何用PySpark移除含至少一个字符串NA的所有DataFrame行?

PySpark移除含"NA"字符串的行(全列处理)

问题描述

我有一个PySpark DataFrame,想要移除其中包含至少一个"NA"字符串的所有行。目前只会针对单个列处理的方法,想知道如何对DataFrame的所有列执行该操作。

可复现代码示例

# 导入模块
from pyspark.sql import SparkSession
from pyspark import SparkContext
from pyspark.sql.functions import col
from pyspark.sql import Row

# 初始化SparkContext
SparkContext.getOrCreate() 

# 初始化SparkSession
spark = SparkSession \
    .builder \
    .master("local") \
    .appName("Introduction au DataFrame") \
    .getOrCreate()

# 创建DataFrame
values = [("1","2","3"), 
          ("NA","1", "2"), 
          ("4", "NA", "1")] 
columns = ['var1', 
           'var2', 
           'var3']
df = spark.createDataFrame(values, columns)

# 初始DataFrame
df.show()
# +----+----+----+
# |var1|var2|var3|
# +----+----+----+
# |   1|   2|   3|
# |  NA|   1|   2|
# |   4|  NA|   1|
# +----+----+----+

# 过滤var1列不含"NA"的行(仅单列处理)
df.where(~col('var1').contains('NA')).show()
# +----+----+----+
# |var1|var2|var3|
# +----+----+----+
# |   1|   2|   3|
# |   4|  NA|   1|
# +----+----+----+

预期输出

+----+----+----+
|var1|var2|var3|
+----+----+----+
|   1|   2|   3|
+----+----+----+

已尝试的无效方法

我试过以下方法,但发现PySpark只识别原生null值,不把字符串"NA"当作缺失值处理:

df.na.drop().show()
df.select([count(when(isnan('var1'), True))]).show()
df.filter(df['var1'].isNotNull()).show()

解决方案

核心问题是:DataFrame中的"NA"是字符串类型,而PySpark的na.drop()、isNotNull()等方法只处理原生的null值,所以直接用这些方法无效。下面提供两种可行方案:

方案1:生成全列过滤条件

遍历所有列,对每一列添加"不含NA字符串"的条件,然后用all()组合所有条件,过滤出所有列都不含"NA"的行:

from pyspark.sql.functions import col, all

# 生成所有列的过滤条件:每一列都不包含"NA"
filter_condition = all(~col(c).contains("NA") for c in df.columns)
# 应用过滤条件
filtered_df = df.where(filter_condition)
filtered_df.show()

方案2:先将"NA"转为null再删除

先把所有列中的"NA"字符串替换成PySpark原生的null,再用na.drop()删除任何含null的行:

# 将所有列中的"NA"替换为null,然后删除含null的行
filtered_df = df.replace("NA", None).na.drop()
filtered_df.show()

两种方案执行后,都会得到你想要的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:55:21