Snowpark Python:统计列缺失值并替换为其他列值的实现方法
Snowpark Python 缺失值统计与替换实现
统计某列缺失值总数
想统计col1的缺失值总数,有两种简单方法:
方法1:用count_null函数
from snowflake.snowpark import functions as F # 直接统计col1的空值数量 null_count = snowpark_df.agg(F.count_null(F.col("col1"))).collect()[0][0] print(f"col1缺失值总数:{null_count}")
方法2:通过空值标识求和
先把空值转为1,非空转为0,再求和得到总数:
null_count = snowpark_df.select(F.col("col1").is_null().cast("int").alias("is_null"))\ .agg(F.sum("is_null")).collect()[0][0] print(f"col1缺失值总数:{null_count}")
实现你要的缺失值替换逻辑
你的Pandas代码逻辑是:col1非空就留着;col1空但col2非空就用col2;col1和col2都空但col3非空就用col3。
你写的代码问题
你用的ifnull(col1, col2)只处理了col1空时用col2的情况,没覆盖col2也空时用col3的场景,所以和原Pandas逻辑不完全匹配。
正确的实现方式
方式1:用coalesce函数(最简洁)
coalesce会返回第一个非空的列,完美匹配你的优先级逻辑:
snowpark_df = snowpark_df.with_column("col1", F.coalesce(F.col("col1"), F.col("col2"), F.col("col3")))
方式2:用case when(和原Pandas逻辑一一对应)
如果想更直观还原原代码的分支判断,可以这么写:
snowpark_df = snowpark_df.with_column( "col1", F.when(F.col("col1").is_not_null(), F.col("col1")) .when(F.col("col2").is_not_null(), F.col("col2")) .otherwise(F.col("col3")) )
可选:还原原Pandas的NULL_CHECK列
如果需要保留原代码里标记缺失类型的NULL_CHECK列,Snowpark也能实现:
snowpark_df = snowpark_df.with_column( "NULL_CHECK", F.when(F.col("col1").is_null() & F.col("col2").is_not_null(), 1) .when(F.col("col1").is_null() & F.col("col2").is_null() & F.col("col3").is_not_null(), 2) .otherwise(0) )
内容的提问来源于stack exchange,提问作者Dhvani Shah
相关产品推荐
相关产品推荐

