如何编写脚本校验数据集内同一ID对应的DoB一致性
同一ID关联DoB一致性校验脚本实现
核心校验逻辑
- 遍历全量数据,以ID为键做分组聚合
- 对每个ID下的所有DoB值做去重处理
- 若单个ID下去重后的DoB值数量大于1,判定为数据不一致,输出指定格式的报错提示
待校验数据集示例
| ID | DoB |
|---|---|
| 1111 | 01/01/2000 |
| 2222 | 03/04/2001 |
| 3333 | 07/22/2002 |
| 1111 | 02/01/2000 |
| 2222 | 03/04/2001 |
常用实现方案
1. Pandas 方案(适合结构化数据集处理)
对CSV、Excel等格式的数据集,用Pandas可以快速完成聚合校验,代码如下:
import pandas as pd # 读取本地数据集,替换为实际的文件路径 df = pd.read_csv("your_dataset.csv", sep=r"\s+") # 按ID分组,统计每个ID下不重复DoB的数量 id_dob_dup_count = df.groupby("ID")["DoB"].nunique() # 提取存在DoB不一致的ID列表 error_ids = id_dob_dup_count[id_dob_dup_count > 1].index.tolist() # 按要求输出报错提示 for id in error_ids: print(f"ID {id} has DoB inconsistencies. Please check")
运行效果:针对上述示例数据,脚本会仅输出ID 1111 has DoB inconsistencies. Please check,ID 2222因所有DoB值一致、ID 3333因仅单条记录,均不会触发报错,完全匹配校验要求。
2. 纯Python轻量方案(无第三方依赖)
如果不想安装额外依赖,用原生Python即可实现基础校验,适合小型文本数据集:
id_dob_storage = {} # 跳过表头逐行读取 with open("your_dataset.txt", "r") as f: rows = f.readlines()[1:] for row in rows: stu_id, dob = row.strip().split() # 用集合自动对DoB去重 if stu_id not in id_dob_storage: id_dob_storage[stu_id] = set() id_dob_storage[stu_id].add(dob) # 遍历校验输出 for stu_id, dob_set in id_dob_storage.items(): if len(dob_set) > 1: print(f"ID {stu_id} has DoB inconsistencies. Please check")
3. AWK快速方案(适合服务器端纯文本数据集处理)
如果在Linux服务器上处理纯文本数据集,无需配置Python环境,直接用AWK命令即可完成校验:
awk ' # 跳过表头后逐行处理 NR > 1 { # 嵌套数组记录每个ID对应的所有DoB,自动去重 dob_record[$1][$2] = 1 } END { # 遍历所有ID校验 for (id in dob_record) { distinct_dob = 0 for (dob in dob_record[id]) { distinct_dob ++ } if (distinct_dob > 1) { print "ID " id " has DoB inconsistencies. Please check" } } }' your_dataset.txt
内容的提问来源于stack exchange,提问作者Andres Mora
相关产品推荐
相关产品推荐

