基于表格中的地址提取出相应的省份列、城市列信息。
1、目的:以下两个表分别是原始数据和需要提取的省市信息的结果。

2、过程(模糊匹配需要中国各省市对应关系表来辅助):
①分别读取地址表格和辅助表(中国各省市对应表)。
注:中国各省市对应表涵盖了最新最全的我国省市对应关系;
其中province为我国34个省、直辖市、自治区,match1是对应的序号(有用);city为我国目前377个地级市、直 辖市,province_city是city所属的省、直辖市、自治区,match2是对应的序号。

import numpy as np
import pandas  as pd
columns_types={"province":str,"match1":int,"city":str,"match2":int}
df0=pd.read_excel(r"C:\Users\E97\Desktop\城市分布\地址表格.xlsx",sheet_name="地址")
da=pd.read_excel(r"C:\Users\E97\Desktop\城市分布\中国各省市对应表.xlsx",sheet_name="省-市",converters=columns_types,engine="openpyxl")

②提取原始表的地址列,并添加地址对应的序号列,做一张大表(DataFrame元组)。

df1=df0["收货地址"]
df_count=df1.count()
senid=pd.DataFrame(np.arange(df_count))
df=pd.concat([senid,df1],axis=1)
df_sentence=df.rename(columns={0:"senid","收货地址":"sentence"})


③创建中国各省市对应表中city的小表(字典形式)。

#城市小表
da_city=da[["city","match2"]].dropna(how="any")
da_province=da[["province_city","city"]].dropna(how="any")
#小表变字典
key_city_dict={row.city : row.match2for row in da_city.itertuples()
}
key_city_dict


④大表遍历小表的字典(目的是匹配到city对应的序号match2)。

# 大表搜寻小表字典
import re
def merge_func(row):# 新增一列,表示能匹配的match1row["keyid_city"]=[match2for city,match2 in key_city_dict.items()if re.search(city,row["sentence"]) ]return row
df_merge=df_sentence.apply(merge_func,axis=1)


⑤用match2映射对应的city。

df_city=pd.merge(left = df_merge.explode("keyid_city"),# left = df_merge.explode("keyids"),  此处explode是将df_merge一行中的多个keyids展开成多行right = da_city,how="left",left_on = "keyid_city",right_on = "match2",
)
df_city


⑥用city映射对应的省份。

df_province=pd.merge(left=df_city,right=da_province,how="left",on="city"
)


⑦提取目标列信息。

df_columns=["senid","sentence","province_city","city"]
df_result=df_province.loc[:,df_columns]
df_result.rename(columns={'senid':'序号','sentence':'原地址'},inplace=True)
df_result.to_excel(r"C:\Users\E97\Desktop\城市分布\匹配结果.xlsx",sheet_name="结果")

⑧完整代码附下:
注:可以通过自定义模块来直接调用函数多次提取地址信息(已完成)。

import numpy as np
import pandas  as pd
columns_types={"province":str,"match1":int,"city":str,"match2":int}
df0=pd.read_excel(r"C:\Users\E97\Desktop\城市分布\地址表格.xlsx",sheet_name="地址")
da=pd.read_excel(r"C:\Users\E97\Desktop\城市分布\中国各省市对应表.xlsx",sheet_name="省-市",converters=columns_types,engine="openpyxl")# 大表
df1=df0["收货地址"]
df_count=df1.count()
senid=pd.DataFrame(np.arange(df_count))
df=pd.concat([senid,df1],axis=1)
df_sentence=df.rename(columns={0:"senid","收货地址":"sentence"})#城市小表
da_city=da[["city","match2"]].dropna(how="any")
da_province=da[["province_city","city"]].dropna(how="any")
#小表变字典
key_city_dict={row.city : row.match2for row in da_city.itertuples()
}
key_city_dict# 大表搜寻小表字典
import re
def merge_func(row):# 新增一列,表示能匹配的match1row["keyid_city"]=[match2for city,match2 in key_city_dict.items()if re.search(city,row["sentence"]) ]return rowdf_merge=df_sentence.apply(merge_func,axis=1)
df_merge.head()df_city=pd.merge(left = df_merge.explode("keyid_city"),# left = df_merge.explode("keyids"),  此处explode是将df_merge一行中的多个keyids展开成多行right = da_city,how="left",left_on = "keyid_city",right_on = "match2",
)
df_city.head()
df_province=pd.merge(left=df_city,right=da_province,how="left",on="city"
)
df_columns=["senid","sentence","province_city","city"]
df_result=df_province.loc[:,df_columns]
df_result.rename(columns={'senid':'序号','sentence':'原地址'},inplace=True)
df_result.to_excel(r"C:\Users\E97\Desktop\城市分布\匹配结果.xlsx",sheet_name="结果")

模糊匹配提取地址中的省市相关推荐

  1. java 正则表达式 提取ip_java正则表达式提取地址中的ip和端口号

    由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...

  2. mysql 反向匹配子串,Mysql 模糊匹配(字符串str中是否包含子字符串substr)

    1.LIKE 通常与 % 一同使用,类似于一个元字符的搜索.若substr不在str中,则返回0. SELECT 'test' LIKE '%e%' as `ret`; # 1 SELECT 'tes ...

  3. python数据模糊匹配,使用python中两个数据集的模糊匹配创建标志

    我尝试了两个df的模糊比较,就我的研究而言,没有快速的方法来做.使用4fuzz方法也会降低脚本的速度.一种方法是使用'工艺提取酮()`并创建一个函数:from fuzzywuzzy import pr ...

  4. python两个excel字段模糊匹配_Excel模糊查找中使用的算法 - python

    我正在匹配两个公司的公司名称.我试图用Levenstien的距离在Python中进行编码.我遇到公司简称以及诸如Pvt,Ltd之类的尾随问题.我已经使用Excel Fuzzy查找运行了相同的集合,并获 ...

  5. Python中实现模糊匹配的魔法库:FuzzyWuzzy

    参考链接:https://mp.weixin.qq.com/s/5qzPb7HOCfRRGJICYUsAOQ FuzzyWuzzy一个简单易用的模糊字符串匹配工具包.让你轻松解决烦恼的匹配问题! 前言 ...

  6. java 字符串模糊匹配_Java实现伪查询(全匹配+模糊匹配)

    Java实现伪查询(全匹配+模糊匹配) 在项目中一直习惯了框架下[springboot+mybatis]的增删改查,然后领导突然给了一个需求,让我先弄一些假数据出来,用于页面的展示,业务啥的也没说,咱 ...

  7. 从地址中如何提取或者识别街道?支持模糊地址

    从地址中如何提取或者识别街道? 直接上效果: 1.没有街道情况下,也能识别出街道 地址:郑州大学南校区 识别效果: {"source":"郑州大学南校区",&q ...

  8. 菜鸟驿站是如何实现详细地址的省市区街道区分的?教你使用Python完成地址的模糊匹配

    摘要:正如题目中说的一样,这个程序的目的是地址的模糊匹配,也可以迁移到房产信息.电话号码之类的字段上.本来的应用场景是反团伙欺诈以及失联客户的修复,大概的意思就是说多个相同公司的同事都在我公司借贷的欺 ...

  9. python 公司名称 相似度分析_使用Python完成公司名称和地址的模糊匹配

    正如题目中说的一样,这个程序的目的是实现公司名及公司地址的模糊匹配,也可以迁移到房产信息.电话号码之类的字段上.本来的应用场景是反团伙欺诈以及失联客户的修复,大概的意思就是说多个相同公司的同事都在我公 ...

最新文章

  1. C++ 莫队算法(转)
  2. 变态题大串烧:微软面试问题 -- 三.难题:这类题有一定难度,如果得不到答案,也不能说明什么...
  3. C++:C++语言入门级基础知识考察点回顾之数组、指针
  4. 想用Python爬小姐姐图片?那你得先搞定分布式进程
  5. linux malloc速度,性能 – memcpy()的速度受malloc()的不同方式的影响很大
  6. chrome 样式Bug?
  7. POJ 3415 Common Substrings(后缀数组 + 单调栈)题解
  8. 【Fiddler抓包】Fiddler基础用法-基于Fiddler5中文汉化版
  9. 三、实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方
  10. OFDM学习笔记(七)(多址接入技术)
  11. 上海宝付知识普及:个人信用到底多重要?
  12. test1asfd 按时收费的水电费阿萨德阿斯蒂芬啊
  13. 一步一个脚印——开启博客
  14. Spring Boot 报错ThreadPoolTaskExecutor : Shutting down ExecutorService ‘applicationTaskExecutor‘
  15. ROS 初学入门学习及资源推荐
  16. IMX6 LCD 参数匹配过程分析
  17. Linux游戏市场,Tacoma上的Nixie Pixel以及更多开放游戏新闻
  18. Weston 窗口管理(2)
  19. CMake添加pthread.h
  20. Linux下IO监控与分析 --转载

热门文章

  1. 2019_NAACL_A Capsule Network-based Embedding Model for Knowledge Graph Completion and Search Persona
  2. 20170222找女朋友之路思考总结
  3. Sublime text 3安装详细教程
  4. layui让当前页面刷新_layui怎么刷新当前页面?
  5. android百度定位失败的原因,android百度地图定位集成失败,求助
  6. 【演歌】加賀の女 歌词翻译
  7. 36Kr季报图解:营收5553万元同比增12% 净亏3900万
  8. 校友录管理网站毕业设计
  9. 社群变现的道与术:私域流量与用户运营
  10. 基于距离传感器的自动锁屏程序