大数据,机器学习,人工智能大数据机器学习与数据挖掘

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

2020-03-06  本文已影响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)

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

上一篇下一篇

猜你喜欢

热点阅读