数据挖掘:使用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)

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

猜你喜欢

转载自blog.csdn.net/STL_CC/article/details/107029569