从字符串中识别出省市区的信息分别存储,是我们经常会碰到的问题。
如果用分词的方法去匹配获取比较麻烦,cpca包提供了便捷的调用函数transform。
只要把含省市区的信息放进去,即可返回标准的含省市区的数据框。
本文详细阐述如何安装cpca包、transform函数参数定义,以及如何调用transform函数实现省市区信息获取。
一、安装cpca包
要想使用transform函数,首先需要安装cpca包。具体代码如下:
代码语言:javascript复制pip install cpca
有些人直接用以上代码即可安装成功,我安装时报错如下:
网上找了下方法,
建议一:先安装Visual C 14.0或VC tools工具包,再执行上面的安装语句。
建议二:安装对应的whl文件。
建议三:
代码语言:javascript复制step1:在cmd中先运行 conda config --add channels conda-forge
step2:再运行 conda install pyahocorasick
step3:最后运行pip install cpca
大部分的文章都是建议一的做法,但是我不想安装vc,感觉比较麻烦,就从最简单的方法去尝试。
先按建议三的方法去执行,想着不行再去找对应的whl,如果还不行就安装vc。
没想到我的电脑按建议三的方法执行就安装成功了。
结果如下:
二、transform参数详解
代码语言:javascript复制接着写循环统计每个文件中指定词出现的次数,具体代码如下:
代码语言:javascript复制transform(location_strs, index=None, pos_sensitive=False, umap={})
参数详解:
代码语言:javascript复制 locations_strs:地址描述字符集合,可以是list, Series等任意可以进行for in循环的集合。比如:["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区"]。 index:可以通过这个参数指定输出的DataFrame的index,默认情况下是range(len(data))。 pos_sensitive:默认值False,如果为True则会多返回三列,分别提取出的省市区在字符串中的位置,如果字符串中不存在的话则显示-1。 umap:当只有区的信息时, 且该区存在同名时, 指定该区具体是哪一个,字典的 key为区名,value为 adcode, 比如 {"朝阳区": "110105"}。
代码语言:javascript复制
三、transform调用案例
1 用transform函数默认参数识别字符串中地址 首先调用transform函数,用默认参数识别字符串中的地址,具体代码如下: import cpca cpca.transform(["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", '天津市国土资源局']) 得到结果:
可以发现如果地址中只有区,会自动补全前面的省和市。 其中adcode表示地址对应的行政编码。 2 改变transform函数参数识别字符串中的地址接着调整pos_sensitive参数的值识别地址,展示对应的省市区在字符串中的位置,具体代码如下: cpca.transform(["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", '天津市国土资源局'], pos_sensitive=True) 得到结果:
可以发现省_pos、市_pos、区_pos的值对应了省市区在字符串中的位置,如果字符串中不存在的话则显示-1。 3 批量识别字符串中的省市区并导出最终数据最后,读取本地数据,识别供应商名称中的省市区,具体代码如下: import os import cpca import pandas as pd #导入数据处理的库 import numpy as np #导入数据处理的库 os.chdir(r'F:公众号85_公司名称中提取省市区') #存储数据的路径,需替换成你电脑存储路径 data = pd.read_excel('date.xlsx', sheet_name='Sheet1') #读取数据 place_list=[] for i in data['供应商名称']: #构造公司地址list place_list.append(i) all_integrity_place = cpca.transform(place_list) #识别出公司名称中的省市区 all_integrity_place['供应商名称'] = data['供应商名称'] #添加供应商名称列 all_integrity_place 其中data数据形式如下:
运行代码得到结果:
代码语言:javascript复制
导出数据:
all_integrity_place.to_csv('result.csv')
#导出数据