拯救pandas计划(22)——再话extract和extractall
拯救pandas计划(22)——再话extract和extractall
最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投向其他的数据操作库,身为一个数据工作者,基本上是张口pandas,闭口pandas了,故而写下此系列以让更多的小伙伴们爱上pandas。
系列文章说明:
系列名(系列文章序号)——此次系列文章具体解决的需求
平台:
windows 10
python 3.8
pandas >=1.2.4
/ 数据需求
对指定列提取指定字符。
import pandas as pddata = {'num': ['1-3\n-7', '2', '1-5', '3-5-8\n', '0-4-5-10', '4-81-15'],'string': ['打水泥打灰,需要水泥打灰,搅拌下', '我不打灰谁打灰', '不想打灰了', '打点灰吧,要不去搬袋水泥', '搬水泥,打灰,搅拌均匀', '搅拌,搅拌……']
}
df = pd.DataFrame(data)
/ 需求处理
在处理需求之前,先解释下这两个方法的参数,在拯救pandas计划(18)——统计列中元素包含某字符的次数中是有使用过extractall,在此进行一个补充说明,值得注意的是,仅能作用在字符串上。
pd.Series().str.extract
pat : str 正则表达式
flags : int, 匹配规则,如忽略大小写,跨行匹配,默认0
expand : bool, 是否将结果展开成DataFrame类型
pd.Series().str.extractall
pat : str 正则表达式
flags : int, 匹配规则,如忽略大小写,跨行匹配,默认0
虽然参数上少了一个,但相比下,是以组的形式进行返回,多个结果是以match作为索引放置。
下面拟定一些需求并进行处理:
提取
num
列中的第一个数字
df['num'].str.extract(r'(\d)')
默认expand
为True,返回的结果是DataFrame类型,可以改成False,那么返回值就是Series,写法类似于re中的search函数,需要用括号将需要提取的值括起来,当然也能设置返回的列名。
df['num'].str.extractall(r'^(\d)')
对比extract
,extractall
的表达式更为细致,如不在表达式中添加^
符号以表明只匹配首字符,那么会将待匹配字符串中符合表达式的字符全部提取出来,extract
有点像re.match
,结果会多生成一个名为match的索引,来记录每行匹配到的顺序。
提取
num
列中首尾的两个字符且为数字
import redf['num'].str.extract(r'^(\d)?.*?(\d)$', re.S)
这里用re.S模式,让.
可以匹配换行符,当匹配的组数多了,对应生成的列就多了,自然expand的参数就无效了,同样也能用?P
设置返回的列名。
适应只有一个字符的情况,将匹配的第一个字符做了可有可无处理,比如num
列的第二个数据,其中只有一个2,可以按情形设置匹配的表达式。
import redf['num'].str.extractall(r'^(\d)?.*?(\d)$', re.S)
除会多生成一个match索引外,两者没有其他区别。
匹配
string
列中包含给定的两个关键字中的其中一个
df['string'].str.extract(r'(水泥|打灰)')
df['string'].str.extractall(r'(水泥|打灰)')
在括号中写上两个关键字,用竖线|
隔开,可以看到两种方法的结果区别很明显,左边只匹配返回第一个匹配到的关键字,而右边将所有能匹配到的都会返回。
匹配返回
string
列中两个关键字都存在的行
extract
需要用单句表达式进行重复匹配,换言之,使用断言的方式,匹配到一个关键词,从开始处匹配另一个关键词。
df['string'].str.extract(r'(?=.*打灰)(?=.*水泥)(.*)')
这里用(.*)
作为返回的结果,需要注意的是,如果需要.
能匹配\n
,用re.S模式。
extractall
除使用同样的表达式之外,在上一个方法能得知,会将所有符合条件的部分都返回,那么可以对结果进行分组去重统计,如果统计结果等于关键字的数量,就说明都存在,进而返回符合条件的行。
keywords = ['水泥', '打灰']
# 构造表达式
pattern = '|'.join(keywords) # 水泥|打灰
# 匹配字符串
extract = df['string'].str.extractall(fr'({pattern})').groupby(level=0).nunique()
# 返回满足条件的行
df.loc[extract[extract[0] == len(keywords)].index]
/ 总结
本篇通过几个小的示例代码简单地对extract
和extractall
的用法进行说明,可以类比re模块的findall、search、match函数,这两种方法需要有对正则表达式的掌握度,通过正则表达式将数据提取成多列数据,也能结合其他方法来转换处理成目标结果。
也许我们的存在并不能让这个世界发生重大的变化,坚持或许才能离成功更接近。
于二零二二年七月十一日作
拯救pandas计划(22)——再话extract和extractall相关推荐
- 拯救pandas计划(7)——对含金额标志的字符串列转换为浮点类型数据
拯救pandas计划(7)--对含金额标志的字符串列转换为浮点类型数据 / 数据需求 / 需求拆解 / 需求处理 方法一 方法二 / 总结 最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投 ...
- 拯救pandas计划(16)——将DataFrame的奇偶列位置进行前后对调
拯救pandas计划(16)--将DataFrame的奇偶列位置进行前后对调 / 数据需求 / 需求拆解 / 需求处理 / 总结 最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投向其他的数 ...
- python进阶22再识单例模式
原创:python进阶22再识单例模式 父子进程内部变量是否可以直接共享,当然不是,需要"特殊加工"下才行. 那么在web开发中的单例模式,是真正的全局唯一的单例么?自然也是否 惭 ...
- 顶点计划2-2调研报告
顶点计划2-2组:关于大学内传单问题的调研 第一轮:经过小组讨论,我们确定了一个主要矛盾:发传单的人想要将一些信息通过传单的方式进行宣传,但收单的人因为感到生活受到影响而对传单产生排斥. 一方面,从发 ...
- 最全MySQL8.0实战教程 22 MySQL的优化 22.4 explain分析执行计划 22.4.1 基本使用
最全MySQL8.0实战教程 文章目录 最全MySQL8.0实战教程 22 MySQL的优化 22.4 explain分析执行计划 22.4.1 基本使用 [黑马程序员MySQL知识精讲+mysql实 ...
- 来听听外国UX设计师的22句话
设计师在工作中经常被各种改改改虐到痛不欲生,本文给大家总结了22个让你成为炫酷设计师的方法,新技能get起来! 1.在会议结束之前离场,临走前潇洒的挥挥手:"抱歉各位,我必须得先走一步了,还 ...
- gawk如何在win7安装_WIN7系统如何安装PS2021?拯救你的WIN7再战斗一年
WIN7 系统如何安装 "PS 2021"? 拯救你的 WIN7 系统,再战斗一年! 首先紫枫要说明的是,在WIN7系统下正常情况是无法安装最新版本的 PS 2021的,PS 20 ...
- c++入门之 再话类
对于类,其结构并不难,但要理解其设计思想也并不容易,在此,我们可以通过下面的代码进一步理解和使用类: 1 # ifndef VECTOR_H_ 2 # define VECTOR_H_ 3 # inc ...
- 再话单元测试unittest
单元测试自然是对程序中最小的可测试模块--函数来进行测试:因为单元测试的对象是函数,也就是说你得被测试对象一定要有输出结果,哪怕就是异常输出,也得有输出,以便单元测试模块能够捕获返回值,并且与预期值进 ...
最新文章
- Case when then esle end
- 开始学习python的感受
- 【文本描述增强】标准屏幕字段文本描述更改增强
- python 输入10个整数_2019-07-18 python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。...
- myeclipse写简单bbs代码_RabbitMQ实现即时通讯居然如此简单!连后端代码都省得写了?...
- Minimum grid
- 【HDU - 5878】I Count Two Three(打表)
- 【自动化测试】整理各种测试开发工具!持续更新
- 计算机二级c语言填空题答案唯一吗,计算机二级C语言上机填空题及答案.doc
- 02-HTML标签语法+字体标记
- 【图像检索】基于matlab Hu不变矩图像检索【含Matlab源码 755期】
- 服务器组态文件己写保护,组态王常见问题集锦(一)
- 如何把桌面计算机和回收站隐藏,电脑回收站怎么隐藏图标,隐藏我的电脑和回收站...
- shell小脚本--从laod博客更新hosts文件
- 如何防御DDoS等流量攻击?
- Controlling GC pauses with the GarbageFirst Collector
- 大咖们如何评判优秀架构师?
- 元素始终置于页面底部
- 使用诚龙网维PXE网克工具需注意的几点 不断更新中
- 四旋翼的非线性模型预测控制(MPC)