Python extract及contains方法代码实例


Posted in Python onSeptember 11, 2020

一,extract方法的使用

extract函数主要是对于数据进行提取。场景一般对于DataFrame中的一列中的数据进行提取的场合比较多。

例如一列中包含了很长的字段,我们希望在这些字段中提取出我们想要的字段时,就可以通过extract方法进行数据的提取了。

好了,废话不多说直接上代码。

数据源

序号  姓名  服务卡卡号  消费地点  消费时间  理赔金额(元)  交易明细  数量
1  张三  8100001  我爱花钱连锁有限公司  2020/3/1 8:02  605  珍牡肾骨胶囊(珍泉)0.63g*48粒*3盒  1
2  张三  8100001  我爱花钱连锁有限公司  2020/3/1 8:02  1225  桂龙药膏(葛洪)202g*6瓶  1
3  张三  8100001  我爱花钱连锁有限公司  2020/3/2 10:58  27  胆宁片(上药牌)0.36g*60片/瓶  1
4  李四  8100002  我爱花钱连锁有限公司  2020/3/1 9:20  30  阿莫西林胶囊0.5g*24粒/盒  3
5  李四  8100002  我爱花钱连锁有限公司  2020/3/1 9:20  5  氨咖黄敏胶囊(康麦尔)12粒/盒  1
6  李四  8100002  我爱花钱连锁有限公司  2020/3/4 14:26  51  阿归养血口服液(中联)10ml*24支/盒  1
7  李四  8100002  我爱花钱连锁有限公司  2020/3/4 14:26  5  氨咖黄敏胶囊(康麦尔)12粒/盒  1
8  李四  8100002  我爱花钱连锁有限公司  2020/3/9 17:56  28  胆宁片(上药牌)0.36g*60片/瓶  1
9  李四  8100002  我爱花钱连锁有限公司  2020/3/19 11:19  56  柴石退热颗粒(德众)8g*6袋/盒  1
10  李四  8100002  我爱花钱连锁有限公司  2020/3/21 16:04  68  醒脾胶囊0.3g*30粒  1
11  李四  8100002  我爱花钱连锁有限公司  2020/3/31 10:00  60  小败毒膏(东方博爱)10g*8袋  1
12  王五  8100003  我爱花钱连锁有限公司  2020/3/1 10:43  114  枣仁安神液10ml*7支  1
13  王五  8100003  我爱花钱连锁有限公司  2020/3/17 10:40  118  益气维血颗粒(红珊瑚)10g*15袋  1
14  王五  8100003  我爱花钱连锁有限公司  2020/3/21 8:19  615  比卡鲁胺片(双益安)50mg*14s*2板  1
15  王五  8100003  我爱花钱连锁有限公司  2020/3/1 10:56  120  消痛贴膏(奇正)1.2g:2.5ml*10贴/盒  1
16  王五  8100003  我爱花钱连锁有限公司  2020/3/1 12:56  198  复方首乌地黄丸(修正)3g*10袋*3小盒  1
17  王五  8100003  我爱花钱连锁有限公司  2020/3/1 12:56  28  胆宁片(上药牌)0.36g*60片/瓶  1
18  王五  8100003  我爱花钱连锁有限公司  2020/3/1 13:53  256  河车大造丸(同仁堂)9g*10丸/盒  1
19  赵六  8100004  我爱花钱连锁有限公司  2020/3/1 14:52  7  复方氨酚烷胺片(新迪)12片/盒  1
20  赵六  8100004  我爱花钱连锁有限公司  2020/3/1 14:52  149  法莫替丁分散片20mg*36片/盒  1
21  赵六  8100004  我爱花钱连锁有限公司  2020/3/9 19:56  100  朱砂安神丸6g*10袋  1
22  赵六  8100004  我爱花钱连锁有限公司  2020/3/9 19:56  23  清热消炎宁片0.4g*24片/盒  1
23  赵六  8100004  我爱花钱连锁有限公司  2020/3/1 15:16  30  多酶片100s/盒  1
24  赵六  8100004  我爱花钱连锁有限公司  2020/3/1 15:16  1139  补肺丸(养无极)9g*10丸*16板  1
25  赵六  8100004  我爱花钱连锁有限公司  2020/3/5 17:25  170  补肾益寿片(恒修堂)0.4g*100片  1
26  赵六  8100004  我爱花钱连锁有限公司  2020/3/5 17:25  800  益安宁丸72丸*2瓶(每18丸重3.1g)  1
27  赵六  8100004  我爱花钱连锁有限公司  2020/3/9 17:39  800  益安宁丸72丸*2瓶(每18丸重3.1g)  1
28  赵六  8100004  我爱花钱连锁有限公司  2020/3/11 17:30  480  七十味珍珠丸(甘露)1g*6s  1
29  赵六  8100004  我爱花钱连锁有限公司  2020/3/22 16:58  1154  双参龙胶囊45盒装0.3g*24s*45盒  1
30  杨七  8100005  我爱花钱连锁有限公司  2020/3/1 16:54  100  朱砂安神丸6g*10袋  1
31  杨七  8100005  我爱花钱连锁有限公司  2020/3/12 20:53  14  消痔灵片0.3g*24片  1
32  杨七  8100005  我爱花钱连锁有限公司  2020/3/18 10:04  402  回元堂 固本回元口服液 20ml*24瓶20ml*24瓶  1
33  杨七  8100005  我爱花钱连锁有限公司  2020/3/21 11:18  847  伏立康唑分散片(复锐)0.2g*6s  1
34  杨七  8100005  我爱花钱连锁有限公司  2020/3/1 17:36  30  多酶片100s/盒  1

代码

这里是通过jupyter来分段显示的。第一次看我文章的小伙伴如果不了解jupyter可以在复制下面代码的时候把所有输出改成通过print()的方式输出

#%%

import pandas as pd
import re

#需求: 
# 1. 把交易明细分成明细跟规格两列并删除交易明细这列
# 2. 明细中把例如珍牡肾骨胶囊(珍泉)的作为明细,0.63g*48粒*3盒作为规格拆分提取

#读取源数据
df = pd.read_excel("./datas/extract案例演示数据.xlsx")

#%%
#提取交易明细这一列
get_column = df["交易明细"]

#通过正则提取数据(?P<名字>)为固定写法给数据加新列名
df01 = get_column.str.extract(R"(?P<明细>[\u4E00-\u9FA5]+\(*[\u4E00-\u9FA5]+\)*)")
df02 = get_column.str.extract(R"(?P<规格>(?:0.|\w*)\w*\*\w*[\u4e00-\u9fa5](?:\S+|))")

#%%
#通过join函数合并2个DataFrame
join_data = df01.join(df02)
join_data
#%%
#删除原有交易明细数据
del df["交易明细"]
df
#%%
#二次合并,删除后交易明细的dataframe合并拆分后数据的dataframe
two_join = df.join(join_data)
#%%
#因为合并后存在排序问题,列名为汉字所以我通过loc方法进行的列名指定排序
#loc方法这里不再讲解,请参照loc,iloc篇章

result = two_join.loc[:,["序号","姓名","消费地点","消费时间",
     "理赔金额(元)","明细","规格","数量"]]
result

#%%
#输出到Excel
result.to_excel("./datas/extract_结果.xlsx",index=False)
print("文件写入完毕!!")
#%%

结果

Python extract及contains方法代码实例

二,contains方法的使用

contains对比extract而言更多的不是提取,而是一种筛选。有种想python中的in的关系。

只要查询的DataFrame的某列或者某行包含查询字符串的部分字段就可以匹配出所有匹配到的数据。当然可以直接传字符串也可以通过正则来进行筛选。

数据源

学员编号  学生姓名  学生年龄  手机号码  E-mail地址  家庭住址
101  刘鹏  18  13599713364  www.zhangsan@qq.com  江苏省苏州市工业园区津梁街
102  李四  20  15923796671  www.lisi.163.com  北京市朝阳区西北路石井街22幢
103  赵五  17  18655301183  www.zhaofive.yahoo.com  山东省烟台市芝罘区北大街55号
104  tony  30  15877563321  www.tonyliu.ibm.com  江苏省苏州市姑苏区山塘街177号
105  马云  47  15977560013  www.mayun.alibaba.com  浙江省杭州市西湖路110号1888
106  Jack  20  13677569901  www.jack123@qq.com  广东省深圳市南山区西丽1592幢12
107  tom  19  18622349971  www.tom456@qq.com  山东省青岛市人民路1234幢

代码:这里通过jupyter分段来显示结果

#%%
import pandas as pd
import re
df = pd.read_excel("./datas/Person_info1.xlsx")
#%%
#传入正则匹配只要包含的数据
df.loc[df["家庭住址"].str.contains(r"\d")]

结果

Python extract及contains方法代码实例

通过字符串筛选数据

#%%
#传入字符串,contains属于模糊查找.只要包含就筛选
df.loc[df["家庭住址"].str.contains(r"津梁街")]
#%%
df.loc[df["家庭住址"].str.contains("江苏省")]

结果

Python extract及contains方法代码实例

另外contains可以二次多次运用。因为涉及到保密数据不方便展示复杂数据。大家可以先尝试按照上面的简单数据,先过滤出家庭地址,再过滤出来年龄。

当然也可以通过loc中的掩码来过滤。方法很多希望灵活应用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中条件选择和循环语句使用方法介绍
Mar 13 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
基于pip install django失败时的解决方法
Jun 12 Python
使用Python画出小人发射爱心的代码
Nov 23 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
Python的logging模块基本用法
Dec 24 Python
python函数指定默认值的实例讲解
Mar 29 Python
Python list去重且保持原顺序不变的方法
Apr 03 Python
Python爬虫基础讲解之请求
May 13 Python
python 利用zmail库发送邮件
Sep 11 #Python
浅析Python 责任链设计模式
Sep 11 #Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 #Python
python实现邮件循环自动发件功能
Sep 11 #Python
Python 实现微信自动回复的方法
Sep 11 #Python
python 如何调用远程接口
Sep 11 #Python
Visual Studio code 配置Python开发环境
Sep 11 #Python
You might like
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
python购物车程序简单代码
2018/04/18 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
scrapy头部修改的方法详解
2020/12/06 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
介绍一下XMLHttpRequest对象
2012/02/12 面试题
Delphi工程师笔试题
2013/09/21 面试题
学校岗位设置方案
2014/01/16 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
班风学风建设方案
2014/05/06 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
2014年学习部工作总结
2014/11/12 职场文书
售票员岗位职责
2015/02/15 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
7个关于Python的经典基础案例
2021/11/07 Python
Java设计模式之享元模式示例详解
2022/03/03 Java/Android