数据挖掘:使用python+pandas处理身份证号数据,获得对应省份籍贯、生日和性别

获取身份证行政区域代码

笔者已经整理好了,并且已经预处理完毕
链接:https://pan.baidu.com/s/1wa9LMEqzgkXdW6Gx4852hQ
提取码:qe5x
在这里插入图片描述

构建APPLY函数

该函数最后会返回一个列表,分别包含籍贯、出生日期和性别

def idto(idnum):
    idnum=idnum['身份证号']
    if len(idnum)!=18:#检查身份证号码是否合法,因为有一些台胞证之类的
        return [np.nan*3]
    area=int(idnum[:6])
    birth=int(idnum[6:14])
    sex=int(idnum[16:17])
    area=idinfo.loc[area]
    area=area[0]
    if sex&1:
        return [area,birth,'男']
    else:
        return [area,birth,'女']

但是这样并不是很好用,不好与pandas的DataFrame数据类型连接,可以分别获得相应的列
下面的返回值应该都是Pandas的Series数据类型

def idtoarea(idnum):
    idnum=idnum['身份证号']
    if len(idnum)!=18:#检查身份证号码是否合法,因为有一些台胞证之类的
        return [np.nan*3]
    area=int(idnum[:6])
    birth=int(idnum[6:14])
    sex=int(idnum[16:17])
    area=idinfo.loc[area]
    area=area[0]
    return area
def idtobirth(idnum):
    idnum=idnum['身份证号']
    if len(idnum)!=18:#检查身份证号码是否合法,因为有一些台胞证之类的
        return [np.nan*3]
    area=int(idnum[:6])
    birth=int(idnum[6:14])
    sex=int(idnum[16:17])
    area=idinfo.loc[area]
    area=area[0]
    return birth
def idtosex(idnum):
    idnum=idnum['身份证号']
    if len(idnum)!=18:#检查身份证号码是否合法,因为有一些台胞证之类的
        return [np.nan*3]
    area=int(idnum[:6])
    birth=int(idnum[6:14])
    sex=int(idnum[16:17])
    area=idinfo.loc[area]
    area=area[0]
    if sex&1:
        return '男'
    else:
        return '女'

读取数据与应用

读取行政区域代码

idinfo = pd.read_csv('idinfo.csv',encoding='utf-8',header=None,names=['代码','区域'],index_col=0)

应用主要使用apply函数
假设身份证号在‘身份证号’这一列

area = school.apply(idtoarea,axis=1)
birth = school.apply(idtobirth,axis=1)
sex = school.apply(idtosex,axis=1)

这里的axis=1代表从列开始处理
然后插入到原数据相应的列,很好办
比如,我们将性别插进第二行

data.insert(1,'性别',sex)

其他的类似
我们来看看效果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值