一,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("文件写入完毕!!")

#%%

结果

二,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")]

结果

通过字符串筛选数据

#%%

#传入字符串,contains属于模糊查找.只要包含就筛选

df.loc[df["家庭住址"].str.contains(r"津梁街")]

#%%

df.loc[df["家庭住址"].str.contains("江苏省")]

结果

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

原文链接:https://www.cnblogs.com/liupengpengg/p/13534757.html

python extract的使用_Python extract及contains方法代码实例相关推荐

  1. python杨辉三角代码,python实现杨辉三角的几种方法代码实例

    方法一:迭代 def triangle_1(x): """ :param x: 需要生成的杨辉三角行数 :return: """ trian ...

  2. 杨辉三角python语言程序思路_python杨辉三角方法的实例介绍

    程序输出需要实现如下效果:[1] [1,1] [1,2,1] [1,3,3,1] ...... 方法:迭代,生成器def triangles() L = [1] while True: yiled L ...

  3. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  4. 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例

    用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29

  5. python 外部参数过长_介绍python中slice参数过长的处理方法及实例

    python教程栏目介绍slice参数过长的处理方法 很多小伙伴对于slice参数的概念理解停留在概念上,切片的参数有三个,分别是step .start .stop .因为参数的值也是多变的,所以我们 ...

  6. 用Python写一个模拟qq聊天小程序的代码实例

    前言 今天小编就为大家分享一篇关于用Python写一个模拟qq聊天小程序的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 Python 超简单的聊天 ...

  7. python文件信息排序_python文件排序的方法总结

    在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符:用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名'屏蔽'). (1 ...

  8. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  9. python深入与提高_Python深入01 特殊方法与多范式

    Python一切皆对象,但同时,Python还是一个多范式语言(multi-paradigm),你不仅可以使用面向对象的方式来编写程序,还可以用面向过程的方式来编写相同功能的程序(还有函数式.声明式等 ...

  10. python定义变量并赋值_Python动态声明变量赋值代码实例

    这篇文章主要介绍了Python动态声明变量赋值代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过exec().globals()和loca ...

最新文章

  1. 云炬Android开发报错处理教程 Gradle下载超时please configure the proxy settings either in IDE or Gradle
  2. talent-validate-all.js验证框架
  3. kudu导入文件(基于impala)
  4. [LeetCode]题解(python):146-LRU Cache
  5. 正本清源:LBS(基于位置服务)技术——高精准IP地址定位的8大误区(上)
  6. 超赞!设计师完全自学指南
  7. sprint演示会议
  8. 形容java工作者的句子_关于形容工作态度的句子
  9. CSDN【精品专栏】第29期
  10. android 状态栏高度多少像素,Android之获取屏幕的尺寸像素及获取状态栏标题栏高度...
  11. 初级系列11.个人所得税问题
  12. 计算机顶会:投稿时间 会议介绍
  13. Failed to initialize Data Warehouse host process
  14. 电磁式蜂鸣器和压电式蜂鸣器有什么区别?驱动方法一样吗?
  15. 正则表达式(韩顺平讲解)
  16. nokia 1320升级到win10预览版
  17. win7 android 双系统平板 p1000,优派Windows7/Android双系统ViewPad 100
  18. 网络安全学习记录-9
  19. 第1115期AI100_机器学习日报(2017-10-07)
  20. Java中yyyy-MM-dd HH:mm:ss.SSSSSS日期格式精确到毫秒

热门文章

  1. go TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body.
  2. java 16进制整数,Java将整数转换为十六进制整数
  3. 为什么python 为什么没有接口_python没有接口吗
  4. 机器人搏击大赛冠军_机器人的江湖 谁主沉浮——2017格斗机器人大赛侧记
  5. Win10显示此应用无法在你的电脑上运行 此应用无法在你的电脑上运行处理办法
  6. python数字对应车站_python爬虫查询车站信息
  7. Java service层获取HttpServletRequest工具类的方法
  8. Java利用stream(流)对map中的values进行过滤、排序操作
  9. @SuppressWarnings使用的正确姿势
  10. thymeleaf(th:each th:selected) 从后台动态获取下拉框数据回显及选中