pandas中如何按条件修复DataFrame信用卡BIN列的6位格式
Pandas实现信用卡BIN补前导零方案
问题说明
现有采购数据集包含ORDER_ID、BIN、PURCHASE AMOUNT三个字段,样例数据如下:
ORDER_ID | BIN | PURCHASE AMOUNT 1 383218 56.43 2 nan 46 3 3212 56
任务要求:校验信用卡BIN格式是否为6位,对因数值存储丢失前导零、长度不足6位的BIN值补全前导零。
原有尝试代码未生效,代码如下:
payments_df['bin'] for num in payments_df['bin']: if len(num)<6: num.zfill(6)
原有代码问题
- 写法为残缺的列表推导逻辑,没有生成新值序列,也未将结果赋值回DataFrame列
- 未处理
NaN空值,直接对空值取长度、调用字符串方法会触发报错 - 未适配BIN列的数值存储格式:如果列是int/float类型,直接调用
len()会直接抛出类型错误,浮点数转字符串还会带.0后缀导致结果不符合要求
正确实现代码
根据BIN列的存储类型选择对应写法即可:
- 如果BIN列为数值类型(int/float,最常见的前导零丢失场景):
import pandas as pd import numpy as np payments_df['BIN'] = payments_df['BIN'].apply( lambda x: str(int(x)).zfill(6) if pd.notna(x) else np.nan )
逻辑说明:非空值先转整数去掉浮点数后缀,再转字符串后用zfill(6)自动在前面补零到6位长度,空值保留为NaN。
- 如果BIN列已经是字符串类型:
payments_df['BIN'] = payments_df['BIN'].apply( lambda x: x.zfill(6) if pd.notna(x) else x )
处理后样例结果
ORDER_ID | BIN | PURCHASE AMOUNT 1 383218 56.43 2 nan 46 3 003212 56
内容的提问来源于stack exchange,提问作者Daniel Mazuz
相关产品推荐
相关产品推荐

