模糊匹配提取地址中的省市
基于表格中的地址提取出相应的省份列、城市列信息。
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="结果")
模糊匹配提取地址中的省市相关推荐
- java 正则表达式 提取ip_java正则表达式提取地址中的ip和端口号
由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...
- mysql 反向匹配子串,Mysql 模糊匹配(字符串str中是否包含子字符串substr)
1.LIKE 通常与 % 一同使用,类似于一个元字符的搜索.若substr不在str中,则返回0. SELECT 'test' LIKE '%e%' as `ret`; # 1 SELECT 'tes ...
- python数据模糊匹配,使用python中两个数据集的模糊匹配创建标志
我尝试了两个df的模糊比较,就我的研究而言,没有快速的方法来做.使用4fuzz方法也会降低脚本的速度.一种方法是使用'工艺提取酮()`并创建一个函数:from fuzzywuzzy import pr ...
- python两个excel字段模糊匹配_Excel模糊查找中使用的算法 - python
我正在匹配两个公司的公司名称.我试图用Levenstien的距离在Python中进行编码.我遇到公司简称以及诸如Pvt,Ltd之类的尾随问题.我已经使用Excel Fuzzy查找运行了相同的集合,并获 ...
- Python中实现模糊匹配的魔法库:FuzzyWuzzy
参考链接:https://mp.weixin.qq.com/s/5qzPb7HOCfRRGJICYUsAOQ FuzzyWuzzy一个简单易用的模糊字符串匹配工具包.让你轻松解决烦恼的匹配问题! 前言 ...
- java 字符串模糊匹配_Java实现伪查询(全匹配+模糊匹配)
Java实现伪查询(全匹配+模糊匹配) 在项目中一直习惯了框架下[springboot+mybatis]的增删改查,然后领导突然给了一个需求,让我先弄一些假数据出来,用于页面的展示,业务啥的也没说,咱 ...
- 从地址中如何提取或者识别街道?支持模糊地址
从地址中如何提取或者识别街道? 直接上效果: 1.没有街道情况下,也能识别出街道 地址:郑州大学南校区 识别效果: {"source":"郑州大学南校区",&q ...
- 菜鸟驿站是如何实现详细地址的省市区街道区分的?教你使用Python完成地址的模糊匹配
摘要:正如题目中说的一样,这个程序的目的是地址的模糊匹配,也可以迁移到房产信息.电话号码之类的字段上.本来的应用场景是反团伙欺诈以及失联客户的修复,大概的意思就是说多个相同公司的同事都在我公司借贷的欺 ...
- python 公司名称 相似度分析_使用Python完成公司名称和地址的模糊匹配
正如题目中说的一样,这个程序的目的是实现公司名及公司地址的模糊匹配,也可以迁移到房产信息.电话号码之类的字段上.本来的应用场景是反团伙欺诈以及失联客户的修复,大概的意思就是说多个相同公司的同事都在我公 ...
最新文章
- C++ 莫队算法(转)
- 变态题大串烧:微软面试问题 -- 三.难题:这类题有一定难度,如果得不到答案,也不能说明什么...
- C++:C++语言入门级基础知识考察点回顾之数组、指针
- 想用Python爬小姐姐图片?那你得先搞定分布式进程
- linux malloc速度,性能 – memcpy()的速度受malloc()的不同方式的影响很大
- chrome 样式Bug?
- POJ 3415 Common Substrings(后缀数组 + 单调栈)题解
- 【Fiddler抓包】Fiddler基础用法-基于Fiddler5中文汉化版
- 三、实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方
- OFDM学习笔记(七)(多址接入技术)
- 上海宝付知识普及:个人信用到底多重要?
- test1asfd 按时收费的水电费阿萨德阿斯蒂芬啊
- 一步一个脚印——开启博客
- Spring Boot 报错ThreadPoolTaskExecutor : Shutting down ExecutorService ‘applicationTaskExecutor‘
- ROS 初学入门学习及资源推荐
- IMX6 LCD 参数匹配过程分析
- Linux游戏市场,Tacoma上的Nixie Pixel以及更多开放游戏新闻
- Weston 窗口管理(2)
- CMake添加pthread.h
- Linux下IO监控与分析 --转载
热门文章
- 2019_NAACL_A Capsule Network-based Embedding Model for Knowledge Graph Completion and Search Persona
- 20170222找女朋友之路思考总结
- Sublime text 3安装详细教程
- layui让当前页面刷新_layui怎么刷新当前页面?
- android百度定位失败的原因,android百度地图定位集成失败,求助
- 【演歌】加賀の女 歌词翻译
- 36Kr季报图解:营收5553万元同比增12% 净亏3900万
- 校友录管理网站毕业设计
- 社群变现的道与术:私域流量与用户运营
- 基于距离传感器的自动锁屏程序