如何在pandas DataFrame中验证PAN卡号并拆分合格/不合格数据集
PAN号码校验与DataFrame拆分实现
依赖导入
import pandas as pd import re
校验函数编写
def validate_pan_number(value): # 处理空值、空白值场景 if pd.isna(value) or str(value).strip() == "": return "PAN is not present" # 校验PAN格式:5位大写英文字母 + 4位数字 + 1位大写英文字母,总长度10位 clean_pan = str(value).strip() if re.fullmatch(r"^[A-Z]{5}[0-9]{4}[A-Z]$", clean_pan): return True return "PAN is not present"
DataFrame拆分实现
# 构造示例DataFrame,可替换为你的实际数据 data = { "Name": ["x", "s", "A"], "PAN": ["BBDFW7894Q", "", "QWE7892E"] } df = pd.DataFrame(data) # 对PAN列执行校验,生成校验结果列 df["pan_check_res"] = df["PAN"].apply(validate_pan_number) # 拆分数据集 df_pass = df[df["pan_check_res"] == True].drop(columns="pan_check_res").reset_index(drop=True) df_fail = df[df["pan_check_res"] != True].drop(columns="pan_check_res").reset_index(drop=True)
输出结果验证
打印df_pass即可得到校验通过的数据集:
Name PAN 0 x BBDFW7894Q
打印df_fail即可得到校验不通过的数据集:
Name PAN 0 s 1 A QWE7892E
原函数问题说明
你之前写的函数存在以下问题:
- 缺少空值、空白值的判断逻辑,无法处理PAN为空的场景
re.match仅匹配字符串开头,无法保证全串符合格式要求,需替换为re.fullmatchre.match调用时没有传入待匹配的目标值参数- 不需要遍历列,函数作用对象是单个PAN值,无需循环逻辑
内容的提问来源于stack exchange,提问作者user14784453
相关产品推荐
相关产品推荐

