Python extract及contains方法代码实例
一,extract方法的使用
extract函数主要是对于数据进行提取。场景一般对于DataFrame中的一列中的数据进行提取的场合比较多。
例如一列中包含了很长的字段,我们希望在这些字段中提取出我们想要的字段时,就可以通过extract方法进行数据的提取了。
好了,废话不多说直接上代码。
数据源
序号姓名服务卡卡号消费地点消费时间理赔金额(元)交易明细数量 1张三8100001我爱花钱连锁有限公司2020/3/18:02605珍牡肾骨胶囊(珍泉)0.63g*48粒*3盒1 2张三8100001我爱花钱连锁有限公司2020/3/18:021225桂龙药膏(葛洪)202g*6瓶1 3张三8100001我爱花钱连锁有限公司2020/3/210:5827胆宁片(上药牌)0.36g*60片/瓶1 4李四8100002我爱花钱连锁有限公司2020/3/19:2030阿莫西林胶囊0.5g*24粒/盒3 5李四8100002我爱花钱连锁有限公司2020/3/19:205氨咖黄敏胶囊(康麦尔)12粒/盒1 6李四8100002我爱花钱连锁有限公司2020/3/414:2651阿归养血口服液(中联)10ml*24支/盒1 7李四8100002我爱花钱连锁有限公司2020/3/414:265氨咖黄敏胶囊(康麦尔)12粒/盒1 8李四8100002我爱花钱连锁有限公司2020/3/917:5628胆宁片(上药牌)0.36g*60片/瓶1 9李四8100002我爱花钱连锁有限公司2020/3/1911:1956柴石退热颗粒(德众)8g*6袋/盒1 10李四8100002我爱花钱连锁有限公司2020/3/2116:0468醒脾胶囊0.3g*30粒1 11李四8100002我爱花钱连锁有限公司2020/3/3110:0060小败毒膏(东方博爱)10g*8袋1 12王五8100003我爱花钱连锁有限公司2020/3/110:43114枣仁安神液10ml*7支1 13王五8100003我爱花钱连锁有限公司2020/3/1710:40118益气维血颗粒(红珊瑚)10g*15袋1 14王五8100003我爱花钱连锁有限公司2020/3/218:19615比卡鲁胺片(双益安)50mg*14s*2板1 15王五8100003我爱花钱连锁有限公司2020/3/110:56120消痛贴膏(奇正)1.2g:2.5ml*10贴/盒1 16王五8100003我爱花钱连锁有限公司2020/3/112:56198复方首乌地黄丸(修正)3g*10袋*3小盒1 17王五8100003我爱花钱连锁有限公司2020/3/112:5628胆宁片(上药牌)0.36g*60片/瓶1 18王五8100003我爱花钱连锁有限公司2020/3/113:53256河车大造丸(同仁堂)9g*10丸/盒1 19赵六8100004我爱花钱连锁有限公司2020/3/114:527复方氨酚烷胺片(新迪)12片/盒1 20赵六8100004我爱花钱连锁有限公司2020/3/114:52149法莫替丁分散片20mg*36片/盒1 21赵六8100004我爱花钱连锁有限公司2020/3/919:56100朱砂安神丸6g*10袋1 22赵六8100004我爱花钱连锁有限公司2020/3/919:5623清热消炎宁片0.4g*24片/盒1 23赵六8100004我爱花钱连锁有限公司2020/3/115:1630多酶片100s/盒1 24赵六8100004我爱花钱连锁有限公司2020/3/115:161139补肺丸(养无极)9g*10丸*16板1 25赵六8100004我爱花钱连锁有限公司2020/3/517:25170补肾益寿片(恒修堂)0.4g*100片1 26赵六8100004我爱花钱连锁有限公司2020/3/517:25800益安宁丸72丸*2瓶(每18丸重3.1g)1 27赵六8100004我爱花钱连锁有限公司2020/3/917:39800益安宁丸72丸*2瓶(每18丸重3.1g)1 28赵六8100004我爱花钱连锁有限公司2020/3/1117:30480七十味珍珠丸(甘露)1g*6s1 29赵六8100004我爱花钱连锁有限公司2020/3/2216:581154双参龙胶囊45盒装0.3g*24s*45盒1 30杨七8100005我爱花钱连锁有限公司2020/3/116:54100朱砂安神丸6g*10袋1 31杨七8100005我爱花钱连锁有限公司2020/3/1220:5314消痔灵片0.3g*24片1 32杨七8100005我爱花钱连锁有限公司2020/3/1810:04402回元堂固本回元口服液20ml*24瓶20ml*24瓶1 33杨七8100005我爱花钱连锁有限公司2020/3/2111:18847伏立康唑分散片(复锐)0.2g*6s1 34杨七8100005我爱花钱连锁有限公司2020/3/117:3630多酶片100s/盒1
代码
这里是通过jupyter来分段显示的。第一次看我文章的小伙伴如果不了解jupyter可以在复制下面代码的时候把所有输出改成通过print()的方式输出
#%% importpandasaspd importre #需求: #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 #%% #删除原有交易明细数据 deldf["交易明细"] 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("文件写入完毕!!") #%%
结果
二,contains方法的使用
contains对比extract而言更多的不是提取,而是一种筛选。有种想python中的in的关系。
只要查询的DataFrame的某列或者某行包含查询字符串的部分字段就可以匹配出所有匹配到的数据。当然可以直接传字符串也可以通过正则来进行筛选。
数据源
学员编号学生姓名学生年龄手机号码E-mail地址家庭住址 101刘鹏1813599713364www.zhangsan@qq.com江苏省苏州市工业园区津梁街 102李四2015923796671www.lisi.163.com北京市朝阳区西北路石井街22幢 103赵五1718655301183www.zhaofive.yahoo.com山东省烟台市芝罘区北大街55号 104tony3015877563321www.tonyliu.ibm.com江苏省苏州市姑苏区山塘街177号 105马云4715977560013www.mayun.alibaba.com浙江省杭州市西湖路110号1888 106Jack2013677569901www.jack123@qq.com广东省深圳市南山区西丽1592幢12 107tom1918622349971www.tom456@qq.com山东省青岛市人民路1234幢
代码:这里通过jupyter分段来显示结果
#%% importpandasaspd importre df=pd.read_excel("./datas/Person_info1.xlsx") #%% #传入正则匹配只要包含的数据 df.loc[df["家庭住址"].str.contains(r"\d")]
结果
通过字符串筛选数据
#%% #传入字符串,contains属于模糊查找.只要包含就筛选 df.loc[df["家庭住址"].str.contains(r"津梁街")] #%% df.loc[df["家庭住址"].str.contains("江苏省")]
结果
另外contains可以二次多次运用。因为涉及到保密数据不方便展示复杂数据。大家可以先尝试按照上面的简单数据,先过滤出家庭地址,再过滤出来年龄。
当然也可以通过loc中的掩码来过滤。方法很多希望灵活应用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。