### Python中的Extract与Contains方法详解 #### 一、Extract方法详解 **1.1 Extract方法简介** `extract` 方法主要用于从DataFrame中的一列提取特定模式的数据。它是一种强大的工具,尤其适用于处理包含复杂字符串的数据列,如地址、产品名称等。 **1.2 使用场景** 当面对一个DataFrame中某列数据包含较长且复杂的字符串时(例如,产品名称或地址),我们需要从中抽取特定的信息。例如,在上述数据源中,我们可能想要从“交易明细”列中提取药品名称或规格信息。 **1.3 代码示例** 假设我们有一个DataFrame `df` 如下: ```python import pandas as pd data = { '姓名': ['张三', '张三', '张三', '李四', '李四', '李四', '李四', '李四', '李四', '李四', '李四', '王五', '王五', '王五', '王五', '王五', '王五', '王五', '赵六', '赵六', '赵六', '赵六', '赵六', '赵六', '赵六', '赵六', '杨七', '杨七'], '服务卡卡号': [8100001, 8100001, 8100001, 8100002, 8100002, 8100002, 8100002, 8100002, 8100002, 8100002, 8100002, 8100003, 8100003, 8100003, 8100003, 8100003, 8100003, 8100003, 8100004, 8100004, 8100004, 8100004, 8100004, 8100004, 8100004, 8100004, 8100005, 8100005], '消费地点': ['我爱花钱连锁有限公司'] * 30, '消费时间': ['2020/3/18:02', '2020/3/18:02', '2020/3/210:58', '2020/3/19:20', '2020/3/19:20', '2020/3/414:26', '2020/3/414:26', '2020/3/917:56', '2020/3/1911:19', '2020/3/2116:04', '2020/3/3110:00', '2020/3/110:43', '2020/3/1710:40', '2020/3/218:19', '2020/3/110:56', '2020/3/112:56', '2020/3/112:56', '2020/3/113:53', '2020/3/114:52', '2020/3/114:52', '2020/3/919:56', '2020/3/919:56', '2020/3/115:16', '2020/3/115:16', '2020/3/517:25', '2020/3/517:25', '2020/3/917:39', '2020/3/2216:58', '2020/3/116:54', '2020/3/1220:53'], '理赔金额(元)': [605, 1225, 27, 30, 5, 51, 5, 28, 56, 68, 60, 114, 118, 615, 120, 198, 28, 256, 7, 149, 100, 23, 30, 1139, 170, 800, 800, 480, 1154, 100, 14], '交易明细': ['珍牡肾骨胶囊(珍泉)0.63g*48粒*3盒', '桂龙药膏(葛洪)202g*6瓶', '胆宁片(上药牌)0.36g*60片/瓶', '阿莫西林胶囊0.5g*24粒/盒', '氨咖黄敏胶囊(康麦尔)12粒/盒', '阿归养血口服液(中联)10ml*24支/盒', '氨咖黄敏胶囊(康麦尔)12粒/盒', '胆宁片(上药牌)0.36g*60片/瓶', '柴石退热颗粒(德众)8g*6袋/盒', '醒脾胶囊0.3g*30粒', '小败毒膏(东方博爱)10g*8袋', '枣仁安神液10ml*7支', '益气维血颗粒(红珊瑚)10g*15袋', '比卡鲁胺片(双益安)50mg*14s*2板', '消痛贴膏(奇正)1.2g:2.5ml*10贴/盒', '复方首乌地黄丸(修正)3g*10袋*3小盒', '胆宁片(上药牌)0.36g*60片/瓶', '河车大造丸(同仁堂)9g*10丸/盒', '复方氨酚烷胺片(新迪)12片/盒', '法莫替丁分散片20mg*36片/盒', '朱砂安神丸6g*10袋', '清热消炎宁片0.4g*24片/盒', '多酶片100s/盒', '补肺丸(养无极)9g*10丸*16板', '补肾益寿片(恒修堂)0.4g*100片', '益安宁丸72丸*2瓶(每18丸重3.1g)', '益安宁丸72丸*2瓶(每18丸重3.1g)', '七十味珍珠丸(甘露)1g*6s', '双参龙胶囊45盒装0.3g*24s*45盒', '朱砂安神丸6g*10袋', '消痔'] } df = pd.DataFrame(data) ``` **1.4 提取药品名称** 我们可以使用正则表达式来提取药品名称,即药品名称通常位于括号前的部分: ```python # 提取药品名称 df['药品名称'] = df['交易明细'].str.extract(r'(.*)\(') print(df['药品名称']) ``` **1.5 提取药品规格** 同样,药品规格通常位于括号内的数字信息: ```python # 提取药品规格 df['药品规格'] = df['交易明细'].str.extract(r'\((.*)\)') print(df['药品规格']) ``` #### 二、Contains方法详解 **2.1 Contains方法简介** `contains` 方法用于判断一个字符串是否包含指定的子串。此方法返回一个布尔型Series,其中True表示该元素包含指定的子串,False表示不包含。 **2.2 使用场景** 当我们需要筛选出DataFrame中某一列含有特定子串的行时,`contains` 方法非常有用。例如,我们可能想要找出所有交易明细中含有“胶囊”的记录。 **2.3 代码示例** **2.3.1 检查药品名称是否包含“胶囊”** ```python # 检查药品名称是否包含“胶囊” capsules = df[df['药品名称'].str.contains('胶囊')] print(capsules) ``` **2.3.2 检查药品规格是否包含“g”** ```python # 检查药品规格是否包含“g” grams = df[df['药品规格'].str.contains('g')] print(grams) ``` **总结:** `extract` 和 `contains` 方法是Pandas中处理字符串数据的强大工具。`extract` 可以根据正则表达式从DataFrame的一列中提取特定模式的数据,而`contains` 可以帮助我们快速筛选出含有特定子串的行。这两种方法都非常适合处理文本数据,特别是当数据量较大且格式不统一时。
- 粉丝: 3
- 资源: 983
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助