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’
def delete_shi(s):
    str_s = str(s)
    if str_s==‘nan‘:          # AttributeError: ‘str‘ object has no attribute ‘isnull‘
        return s
    else:
        if str_s[-1]==‘市‘:
            return str_s[0:-1]
        else:
            return s

UserInfoData1.UserInfo_20 = UserInfoData1.UserInfo_20.apply(lambda s: 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. 统一格式,去掉省份变量后缀

# 处理省份变量
def delete_postfix1(s,str):
    if s[-1]==str:
        return s[0:-1]
    else:
        return s

def delete_postfix2(s,str):
    if s[0]==‘内‘:
        return s[0:3]
    elif s[-3:]==str:
        return s[0:2]
    else:
        return s
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. 格式统一好后,导入之前处理好的 城市-省份 对应字典

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

import pickle
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 in zip(UserInfoData1.UserInfo_4,UserInfoData1.UserInfo_7):
    if str(p)==‘nan‘:
        pass
    else:
        province = my_list2.get(p)
        if c in province:
            i = UserInfoData1[UserInfoData1.UserInfo_4==c].index
            UserInfoData1.UserInfo_8[i] = UserInfoData1.UserInfo_4[i]

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

原文地址:https://www.cnblogs.com/dataandmoon/p/9749768.html

时间: 2024-10-13 11:42:41

python构建 城市和省份字典 的实例应用的相关文章

python实现城市和省份字典(根据城市判断属于哪个省份)

首先,在网上拿到一份数据,省份和城市的对应表: 第一张图是省份以及对应的ID 第二张图是省份和城市,以及分别对应的ID 基本的思路是:实现一个字典,省份作为键,省份包含的城市作为值,举个例子:{"江苏省":"南京市","苏州市",··· "徐州市"}. 下面用代码实现: 1. 改变工作目录 1 import os 2 import pandas as pd 3 os.chdir(r'D:\inde\machineLearnin

Python getopt模块处理命令行选项实例教程

分享下Python getopt模块处理命令行选项的一些例子. 在python编程中,getopt模块与shell中的getopt参数模块一样灵活而实用. getopt模块用于抽出命令行选项和参数,也就是sys.argv 命令行选项使得程序的参数更加灵活.支持短选项模式和长选项模式例如 python scriptname.py -f 'hello' --directory-prefix=/home -t --format 'a' 'b' import getopt, sys shortargs

使用Boost.Python构建混合系统(译)

目录 Building Hybrid Systems with Boost.Python 摘要(Abstract) 介绍(Introduction) 设计目标 (Boost.Python Design Goals) Hello Boost.Python World 库概述 (Library Overview) 类公开 (Exposing Classes) 序列化 Serialization 对象接口 Object interface 考虑混合编程 Thinking hybrid 开发历史 Dev

python学习笔记4:字典

python学习笔记4:字典 总结:字典是可变变量: 字典是不排序的,所以不能像列表,元组,字符串一样,切片 1.定义字典dict  --花括号{},字典的只是key-value形式 比如:stu={'name':'zhangying','age':18,'score'=99} 2.key取值,get()方法取值 1)dictname[key] , 取key对应的value值,如果不存在,报错 2)dictname.get(key) , 取key对应的value值,如果不存在,返回none:还可

实战:基于Python构建运维自动化平台

导语: 今天与大家一起探讨如何基于Python构建一个可扩展的运维自动化平台,也希望能与大家一起交流,共同成长. 此次分享将通过介绍OMServer.OManager具备的功能.架构设计.模块定制.安全审计.C/S结构的实现等几个方面的内容来展开. 为什么选择Python? 默认安装且跨平台 可读性好且开发效率高 丰富的第三方库(开发框架.各类API.科学计算.GUI等) 社区活跃&众多开发者. Python在腾讯的现状,根据去年内部提交组件语言统计,除去2.3.4前端技术,Python在高级编

Python列表、元组、字典和字符串的常用函数

Python列表.元组.字典和字符串的常用函数 列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串“abc”中包含3个元组),相当于ls和object合并.注意:object如果是整型,必须以列表的方式传入,不可以以整型或元组的方式传入 2.ls.append(object) 将object作为一个整体插入到ls最后,object可以是字符串,元组,列表和字典 3.ls.insert(index, object

通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile

通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile 1 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile' 2 #!usr/bin/env python 3 #-*-c

一入python深似海--dict(字典)的一种实现

下面是python中字典的一种实现,用list数据结构实现字典.具体是这样的:[[(key1,value1),(key2,value2),...],[],[],...] 内部每一个hash地址是一个list,存放hash地址相同的(key,value)对. dict代码 def Map(num_buckets=256): """Initializes a Map with the given number of buckets.""" aMap

如何基于Python构建一个可扩展的运维自动化平台

嘉宾简介 刘天斯 从事互联网运维工作已13年,目前就职于腾讯-互动娱乐部,负责游戏大数据的运营,曾就职于天涯社区,担任首席架构师/系统管理员. 热衷开源技术的研究,包括系统架构.运维开发.负载均衡.缓存技术.数据库.NOSQL.分布式存储.消息中间件.大数据及云计算.Mesos.Docker.DevOps等领域.擅长大规模集群的运维工作,尤其在自动化运维方面有着非常丰富的经验.同时热衷于互联网前沿技术的研究,活跃在国内社区.业界技术大会,充当一名开源技术的传播与分享者. 导言 受 Reboot