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

如何统计PySpark DataFrame各列中仅含特殊字符的行数?

实现方法

可以通过PySpark的正则匹配和聚合函数来实现这个需求,核心是准确定义“仅含特殊字符”的判断逻辑,再对每列统计符合条件的行数。

具体步骤与代码

  1. 导入必要的函数:
from pyspark.sql.functions import col, count, when
  1. 定义统计逻辑:
    我们需要排除Null值、纯空白单元格(空字符串/全空格)、包含字母/数字的单元格,只统计非空、非纯空白、且所有字符都是非字母数字特殊字符的行。写一个复用的统计函数:
def count_special_only(col_name):
    return count(when(
        col(col_name).isNotNull() 
        & ~col(col_name).rlike('^\\s*$') 
        & col(col_name).rlike('^[^a-zA-Z0-9]+$'),
        1
    )).alias(col_name)
  1. 对所有列执行统计并转成字典:
# 对DataFrame的每一列应用统计函数
result_df = df.agg(*[count_special_only(col) for col in df.columns])

# 将结果转为字典格式
result_dict = result_df.collect()[0].asDict()
print(result_dict)

运行后会输出预期结果:{'ID': 0, 'col_1': 3, 'col_2': 1}

逻辑说明

  • col(col_name).isNotNull():排除Null值(比如样例中col_1的第5行);
  • ~col(col_name).rlike('^\\s*$'):排除纯空白单元格(包括空字符串、全空格,比如样例中col_2的第2、3行);
  • col(col_name).rlike('^[^a-zA-Z0-9]+$'):匹配所有字符都是非字母数字的特殊字符——^和$确保整个字符串都符合规则,[^a-zA-Z0-9]表示不包含字母和数字,+表示至少有一个字符。

如果需要调整特殊字符的范围(比如排除下划线、加号等),只需修改正则表达式中的[^a-zA-Z0-9]部分即可,比如要排除下划线就改成[^a-zA-Z0-9_]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:40:34