基于表格中的地址提取出相应的省份列、城市列信息。
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. [redis设计与实现][5]基本数据结构——整数集合
  2. 个php反序列化漏洞,PHP反序列化漏洞学习(一)
  3. opencv 模板匹配_详细剖析模板匹配
  4. mysql 值到99999后不增值了_MySQL必知必会3
  5. font-weight属性
  6. 算法-两最长回文子串
  7. ubuntu永久修改主机名
  8. hive sql 报错后继续执行_Hive优化之Spark执行引擎参数调优(二)
  9. FDR错误发现率-P值校正学习
  10. [论文翻译] Medical Matting: A New Perspective on Medical Segmentation with Uncertainty
  11. 解决ScrollView嵌套RecyclerView出现item显示不全的问题
  12. HenCoder Android 开发进阶:自定义 View 1-3 drawText() 文字的绘制
  13. 使用ASDM 管理 ciscoASA设备
  14. Win10安装ST-Link驱动--无需下载驱动
  15. 淘宝/天猫/京东/抖音直播年货节抢购秒杀助手更新下载,喵惠抢购助手支持自动免密支付,分享源码共同学习探讨
  16. vue3.0引入element插件报错解决
  17. Vin码识别即车架号识别
  18. oracle求两个字段的日期差
  19. 12.7亿入股五星电器背后,京东家电想成为线上线下“王者”
  20. RT-Thread Studio 字体放大 缩小快捷键

热门文章

  1. 如何对文献进行阅读与整理
  2. 如何使用IDEA创建一个springboot项目
  3. Kommander同步调试方法
  4. 记住这些快捷键,让你轻松玩转mac(macOS 常用快捷键分享)
  5. adb命令录制手机视频
  6. [小技巧][Markdown]上标 /下标 上下角标
  7. mysql四舍五入函数取两位小数_MySQL四舍五入函数ROUND(x)、ROUND(x,y)和TRUNCATE(x,y)
  8. matlab中sumf,sum函数(sum公式使用方法)
  9. SSH Mysql常用命令
  10. 快鲸scrm发布快递行业私域运营解决方案