python dataframe 字符串截取_用Python来审核,解放你的眼睛

Hello,大家好!前一段时间跟一位在银行上班的朋友吃饭,听到她吐槽各部门数据冗杂,数据量又大,每次审核都极为繁琐,眼睛都看瞎了。那么今天就给大家介绍常用的字符串查找语句来做一个简易的审核系统,来减轻大家的工作量。

以下是全世界各个地方的地址,我们可以粗略看出,非常的不规范,中英文混杂,有拼音有汉字,大小写组合,等等,3万多条数据,像极了平时审核的数据,今天我们的目标就是从中挑出中国的地方。

ada9b2e432b4590f62dc2180ebe8258b.png

首先,要确定我们的思路,含有中国地方(不论是拼音还是汉字)的字段全是我们要数据,因此,我们需要先创建一个关键字集,里面含有中国各地地名,以及其拼音。

9571ca0acf2d4487f0a447054a57eedf.png

接下来,我们就可以用Python进行筛选。

第一部分:方法介绍

先给大家介绍find()语句。

find()方法查找指定值的首次出现。如果找不到该值,则 find() 方法返回 -1。

a = 'abCDef'a.find('e')a.find('g')

5c805ba6afd3c683c5a7353b7c392e15.png

参数说明:
string.find(value, start, end)
1、value:要检索的值;
2、start:开始检索的位置。默认是 0;
3、end:结束检索的位置。默认是字符串的结尾。

但是,find()的缺点便是不够灵活,对于英文字母的大小写是比较严格的,例如以下情况便无法查询
a.find('d')

c7f0a0c8a8016b11a79d02ef6ce886a4.png

必须输入大写的“D”方可查询

a.find('D')

7fcf7da91a1c27bc77d9ff3373cdf3b1.png

因此,这个方法不适合在不规范的数据中进行查找。

第二个方法就是给大家介绍正则表达式,一般我们对它的使用常常出现在网络爬虫中,去提取所需要的信息。

今天我们所用到的就是re.findall(),我先用一个简单的例子给大家做个说明:

import rere.findall("python", "I like Python", flags = re.IGNORECASE)

1ca68ea28b06198c82f423275579cda7.png

参数说明:
findall (pattern, string [, flags])
1、pattern:正则表达式;
2、string:需要处理的字符串;
3、flags:说明匹配模式,例如不区分大小写re.I,详细匹配模式说明见下表:

标志

描述

A或ASCII

执行仅8位ASCII字符匹配(仅适用python3)

I或IGNORECASE

执行不区分大小写的匹配

L或LOCALE

为\w、\W、\b和\B 使用地区设置

M或MULTILINE

将 ^ 和 $应用于包括整个字符串的开始和结尾的每一行(在正常情况下,^  和 $仅适用于整个字符串的开始和结尾)

S或DOTALL

使点(.)字符匹配所有字符,包括换行符

U或UNICODE

使用\w、\W、\b和\B在Unicode字符属性数据库中的信息(仅限与python2。python3默认使用Unicode)

X或VERBOSE

忽略模式字符串中未转义的空格和注释

第二部分:代码实现

首先,读取数据,并转换为列表:
import pandas as pdimport numpy as npcitys = pd.read_excel("D:\\city.xls", header = None)Citys = np.array(citys).tolist()goals = pd.read_excel("D:\\goal.xls", header = None)Goals = np.array(goals).tolist()
说明:
因为本人习惯用pandas进行导入和用列表来进行循环操作,所以我用array().tolist()进行转换,如果想直接从DataFrame中进行循环操作,可以用DataFrame.iterrows()、DataFrame.itertuples()、DataFrame.iteritems()来实现。
建立一个空的DataFrame来存储筛选数据:
mistake = pd.DataFrame(columns = ['错误', '内陆城市'])
最后,我们结合循环语句,对目标进行筛选查询:
for city in Citys:    b = "".join(city)    for goal in Goals:        a = "".join(goal)        result = re.findall(b, a,flags=re.IGNORECASE)        if len(result) != 0:            new = pd.DataFrame([[a, b]], columns = ['错误', '内陆城市'])            mistake = mistake.append(new, ignore_index = True)

参数说明:
str.join(sequence)
将序列中的元素(sequence)以指定的字符(str)连接生成一个新的字符串。

最后,去重导出,就大功告成了
mistake.drop_duplicates(inplace = True)mistake.to_excel("D:\\mistake.xls")

3c88e1d7df320f7e7eca5e26b014a243.png

总结

虽然我们从结果中发现,由于在一些单词中包含部分城市的拼音,所以还是需要人工进行二次筛选,但相比较看三万个数据,工作量已经大大减少,此外审核用的关键字集也是极为重要的一点,关键字集越精简,筛选的结果便越好,所以小伙伴们需要根据自己的实际情况去使用。最后,考虑到使用Python做文案审核工作的一般都没有代码经验的小伙伴,因此,我将其打包为.exe文件上传至百度云,可以根据使用说明,便于直接使用。

本文完整代码和exe程序均已上传,关注公众号回复关键字筛选”,即可获得


231d5ed6a6324e80352c64a8656c0edc.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值