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

如何在Polars中检测非唯一行与缺失值并生成合规报告

使用Polars实现双数据校验并生成统一报告

两种可行方案

方案一:分别生成校验报告后用vstack合并

这种方式逻辑清晰,可直接复用你已有的缺失值检测代码,步骤如下:

  1. 检测ID、table、value_a组合重复的违规行
import polars as pl

# 假设你的数据集为df,若原数据无index列,先添加自增索引
df = df.with_row_index("index")

# 找出存在重复的组合
duplicate_groups = df.group_by(["ID", "table", "value_a"])\
                     .agg(pl.count().alias("count"))\
                     .filter(pl.col("count") > 1)

# 关联回原数据,生成重复行的违规报告
duplicate_report = df.join(duplicate_groups, on=["ID", "table", "value_a"], how="inner")\
                     .select(
                         pl.col("index"),
                         pl.lit("ID、table、value_a组合值重复").alias("warning")
                     )
  1. 复用你已有的缺失值检测代码生成报告
    假设你现有代码生成的缺失值报告为missing_report,需保证其结构包含index和warning两列。

  2. 合并两个报告

final_report = duplicate_report.vstack(missing_report)
# 可选:按index排序,方便按行号查看违规信息
final_report = final_report.sort("index")

方案二:单流程一次性生成双校验报告

通过添加标记列,一次性筛选出两类违规行并整理成报告,适合追求处理效率的场景:

# 先添加自增索引(若原数据无index列)
df = df.with_row_index("index")

# 添加重复标记和缺失值标记列
df_with_flags = df.with_columns(
    # 标记组合重复的行
    is_duplicate=pl.col(["ID", "table", "value_a"]).is_duplicated(),
    # 标记mandatory为"M"时存在缺失值的行(可指定检查列,这里默认检查所有列)
    is_missing=pl.when(pl.col("mandatory") == "M")
                 .then(pl.any_horizontal(pl.all().is_null()))
                 .otherwise(False)
)

# 筛选违规行并生成统一报告
final_report = df_with_flags.filter(pl.col("is_duplicate") | pl.col("is_missing"))\
                           .select(
                               pl.col("index"),
                               pl.when(pl.col("is_duplicate") & pl.col("is_missing"))
                                 .then(pl.lit("ID、table、value_a组合重复且必填项缺失"))
                                 .when(pl.col("is_duplicate"))
                                 .then(pl.lit("ID、table、value_a组合值重复"))
                                 .otherwise(pl.lit("mandatory为M的行存在缺失值"))
                                 .alias("warning")
                           )

注意事项

  • 缺失值检测若需指定特定检查列,将代码中的pl.all()替换为pl.col(["指定列1", "指定列2"])即可。
  • 若原数据已有业务意义的index列,可跳过添加自增索引的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:38:15