使用Python为DataFrame的PAN列添加校验状态与无效标识列的方法
解决方案
你原有代码的核心问题有两个:
- 不要在逐行处理的自定义函数内直接修改全局DataFrame的列,会导致赋值逻辑混乱
- 函数返回值格式不统一,需要所有分支都返回**(Invalid值, PAN_Status值)**格式的元组,后续才能直接拆分出两列
另外要注意判断顺序:先判断是否为NaN,再调用字符串的strip()方法,否则NaN调用strip()会抛出类型错误。
完整实现代码
首先导入依赖库:
import pandas as pd import re
修改后的验证函数:
def panValidation(ele): # 先判断是否为空/NaN if pd.isna(ele) or (isinstance(ele, str) and ele.strip() == ''): return (True, "PAN is not present") # 匹配PAN格式规则 elif re.match(r'^[A-Z]{5}[0-9]{4}[A-Z]$', ele.strip()): return (False, "Valid PAN Number") # 格式不匹配 else: return (False, "Not Valid PAN")
应用函数到DataFrame的PAN列,拆分生成两列:
# 此处替换为你自己的原始DataFrame即可 df = pd.DataFrame({ 'PAN': ['ACBDV8521N', '', None, 'AWVFEF'] }) # apply返回的结果会自动把元组拆成两列,分别赋值给Invalid和PAN_Status df[['Invalid', 'PAN_Status']] = df['PAN'].apply(panValidation).tolist()
处理后的输出结果和你要求的格式完全一致:
| PAN | Invalid | PAN_Status |
|---|---|---|
| ACBDV8521N | False | Valid PAN Number |
| True | PAN is not present | |
| NaN | True | PAN is not present |
| AWVFEF | False | Not Valid PAN |
内容的提问来源于stack exchange,提问作者user14784453
相关产品推荐
相关产品推荐

