小案例(八):商户信息整理(python)

作者: 三猫后端 | 来源:发表于2020-03-06 14:04 被阅读0次

    原文链接:小案例(八):商户信息整理(python)

    微信公众号:机器学习养成记 


    1、需求目的

    本次小案例中,我们的样例数据是上海几家商户及其地址信息,其中地址信息包括市、区、具体门牌号,但所有信息均未进行拆分,因此无法对商户名称及地址信息进行更好的应用整理。原始数据如下👇

    我们希望通过一系列整理,可以把数据拆分成商户名称、城市、区、详细地址的格式,并且将商户名称后面括号中的内容去掉,目标结果如下👇

    2、 知识点

    rfind():返回字符串最后一次出现的位置

    根据官方给出的例子,我们要找到“is”最后出现的位置,“is”最后出现的地方前面分别是“t”,“h”,“i”,“s”,“ ”五个字符,最后出现的“is”位于第六个字符处,所以返回结果为5(python中第一个位置从0开始)。

    str ="this is really a string example....wow!!!";

    substr ="is";

    print str.rfind(substr);

    #输出结果为:5

    正则表达式

    python中的re模块可以通过正则表达式实现一系列的字符串匹配功能,其中re.sub()用于替换字符串中的匹配项,'\D'代表除数字以外的任意字符,官方示例中,展示了如何将所有的非数字字符替换为空(即去除所有非数字字符),在本次介绍的案例中我们也用此方法将商户名称后面()中的内容剔除掉。

    import re

    phone ="2004-959-559 

    # 这是一个电话号码"

    # 移除非数字的内容

    num = re.sub(r'\D',"", phone)

    print(num)

    #输出结果为:2004959559

    3、python代码实现

    下面是可以满足需求实现的python代码,主要实现逻辑是:用rfind()逐行进行切分,并通过正则表达式剔除商户名称后面()中内容,生成4个维度的列表;然后把列表整理成字典形式;最后转化为dataframe进行返回。

    def organizedData(data):

    # name : 商户名称

    # city : 城市

    # community : 区

    # detail : 详细地址       

        name = []   

        city = []   

        community = []   

        detail = []

        for line in range(0,data.shape[0]):

            r = data.iloc[line,0].rfind('上海市')

            d = data.iloc[line,0].rfind('区')

            #将店名后面括号中的内容删掉

            name.append(re.sub(r'\([\u4e00-\u9fa5a-zA-Z0-9]*\)','',data.iloc[line,0][0:r]))

            city.append('上海市')

            community.append(data.iloc[line,0][r+3:d+1])

            detail.append(data.iloc[line,0][d+2:])   

            #将列表转换为字典,然后生成数据框

            c = {"name": name,"city": city,"community":community,"detail":detail}   

            result = pd.DataFrame(c)

            return result

    公众号后台回复“整理”获得完整代码


    原文链接:小案例(八):商户信息整理(python)

    微信公众号:机器学习养成记 

    相关文章

      网友评论

        本文标题:小案例(八):商户信息整理(python)

        本文链接:https://www.haomeiwen.com/subject/abhirhtx.html