python创建身份证城市_python构建 城市和省份字典 的实例应用

1. 首先导入数据

UserInfoData1 = pd.read_csv('data.csv',encoding = 'GBK')

UserInfoData1.head()

数据长这个样子:

3. 统一格式,去掉后缀

#去掉城市名称中的 “市”#UserInfoData1.UserInfo_20 = [x[0:-1] for x in UserInfoData1.UserInfo_20 if UserInfoData1.UserInfo_20.notnull().all()]#Length of values does not match length of index

#用此方法的时候,当把序列里面的单个缺失值拿出来的时候,不能判断是否为缺失值,因此转化为字符串判断 == ‘nan’

defdelete_shi(s):

str_s=str(s)if str_s=='nan': #AttributeError: 'str' object has no attribute 'isnull'

returnselse:if str_s[-1]=='市':return str_s[0:-1]else:returns

UserInfoData1.UserInfo_20= UserInfoData1.UserInfo_20.apply(lambdas: delete_shi(s))

UserInfoData1.UserInfo_8= UserInfoData1.UserInfo_20.apply(lambda s: delete_shi(s))

4. 查看一下UserInfo_2为非缺失值时的情况

#UserInfo_2 为非缺失值

index=UserInfoData1[UserInfoData1.UserInfo_2.notnull() & UserInfoData1.UserInfo_4.isnull() & UserInfoData1.UserInfo_8.isnull() &UserInfoData1.UserInfo_20.isnull()].index

UserInfoData1[UserInfoData1.UserInfo_2.notnull()& UserInfoData1.UserInfo_4.isnull() & UserInfoData1.UserInfo_8.isnull() & UserInfoData1.UserInfo_20.isnull()]

输出如下:

可以看到,在UserInfo_2为非缺失值时,其他数据有不同程度缺失

4. 我们以UserInfo_2填充UserInfo_4

#填补UserInfo_4缺失值

UserInfoData1.UserInfo_4[index]=UserInfoData1.UserInfo_2[index]

5. 统一格式,去掉省份变量后缀

#处理省份变量

defdelete_postfix1(s,str):if s[-1]==str:return s[0:-1]else:returnsdefdelete_postfix2(s,str):if s[0]=='内':return s[0:3]elif s[-3:]==str:return s[0:2]else:returns

UserInfoData1.UserInfo_19= UserInfoData1.UserInfo_19.apply(lambda s:delete_postfix2(s,'自治区'))

UserInfoData1.UserInfo_19= UserInfoData1.UserInfo_19.apply(lambda s:delete_postfix1(s,'省'))

UserInfoData1.UserInfo_19= UserInfoData1.UserInfo_19.apply(lambda s:delete_postfix1(s,'市'))

6. 格式统一好后,导入之前处理好的 城市-省份 对应字典

因为,字典中的城市并不全,且名称与数据中有出入,所以用数据更新字典

importpickle

pickle_file= open('dicts.pkl', 'rb')

my_list2=pickle.load(pickle_file)

pickle_file.close()

my_list2.update({'山东':['济南','青岛','淄博','枣庄','东营','烟台','潍坊','济宁','泰安','威海','日照','莱芜','临沂','德州','聊城','滨州','荷泽','菏泽']})

my_list2.update({'内蒙古':['呼和浩特','包头','乌海','赤峰','通辽','鄂尔多斯','呼伦贝尔','巴彦淖尔','乌兰察布','兴安盟','锡林郭勒盟','阿拉善盟','巴彦淖尔盟','乌兰察布盟']})

my_list2.update({'贵州':['贵阳','六盘水','遵义','安顺','铜仁地区','黔西南布依族苗族自治州','毕节地区','黔东南苗族侗族自治州','黔南布依族苗族自治州','黔南','黔东南','毕节','铜仁']})

my_list2.update({'新疆':['乌鲁木齐','克拉玛依','吐鲁番地区','哈密地区','昌吉回族自治州','博尔塔拉蒙古自治州','巴音郭楞蒙古自治州','阿克苏地区','克孜勒苏柯尔克孜自治州','喀什地区','和田地区','伊犁哈萨克自治州','塔城地区','阿勒泰地区','石河子','阿拉尔','图木舒克','五家渠','哈密','阿克苏']})

7. 根据UserInfo_4,UserInfo_7的数据填充UserInfo_8的数据思路是:UserInfo_4是城市,UserInfo_7是省份,如果UserInfo_4属于UserInfo_7,那么认为UserInfo_8(城市)跟UserInfo_4大概率为一个城市

for c,p inzip(UserInfoData1.UserInfo_4,UserInfoData1.UserInfo_7):if str(p)=='nan':pass

else:

province=my_list2.get(p)if c inprovince:

i= UserInfoData1[UserInfoData1.UserInfo_4==c].index

UserInfoData1.UserInfo_8[i]= UserInfoData1.UserInfo_4[i]

当然,这个方法处理这个问题也不是特别合适,但如果遇到需要用城市判断省份,用县城判断城市,省份的时候还是大有可为的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值