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

如何在PySpark中筛选非全0列及NA占比超0.5的列?

问题1:获取PySpark DataFrame中值不全为0.0的所有列

通过统计每列非0值的数量,筛选出非0值数量大于0的列即可:

from pyspark.sql import functions as F

# 统计每列非0值的行数
non_zero_counts = df.agg(
    *[F.sum(F.when(F.col(c) != 0.0, 1)).alias(c) for c in df.columns]
).collect()[0]

# 筛选出不全为0的列名
non_all_zero_cols = [col for col, count in non_zero_counts.asDict().items() if count > 0]

# 生成只包含目标列的新DataFrame
filtered_df = df.select(non_all_zero_cols)

问题2:筛选NA值(字符串"NA")占比大于0.5的列

基于你已生成的df_nan_values(一行多列的占比结果),可以将其转为字典后筛选符合条件的列:

# 将单行占比结果转为字典
nan_ratio_dict = df_nan_values.collect()[0].asDict()

# 筛选出占比超过0.5的列名
high_nan_cols = [col for col, ratio in nan_ratio_dict.items() if ratio > 0.5]

# 示例:删除这些高NA占比列
# df_cleaned = df.drop(*high_nan_cols)

如果想一步完成计算与筛选,也可以合并步骤:

from pyspark.sql import functions as F

# 计算占比并直接筛选
nan_ratios = df.agg(
    *[(F.count(F.when(F.col(c) == "NA", c)) / F.count(c)).alias(c) for c in df.columns]
).collect()[0].asDict()

high_nan_cols = [col for col, ratio in nan_ratios.items() if ratio > 0.5]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:51:08