获取身份证行政区域代码
笔者已经整理好了,并且已经预处理完毕
链接: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)
其他的类似
我们来看看效果