创造新看点
首页 >> 科技咖 >> 正文

pandas 文本操作技巧-正则表达式的应用 先来看看extract的解释: 先来一个实例: 正则表达式知识复习:

日期:2019-08-20 20:25:53 来源:互联网 编辑:小TT 阅读人数:638

pandas是python中处理数据的利器,但是对于刚接触的人来说,excel肯定是更加熟练,接触一段时间后发现很多造作在pandas里面不知道如何实现。

比如,常用的文本的作:left,right,mid,还有“&”...等等都是常用的文本的操作技巧,很方便,但是在pandas里面根本找不到类似的函数或者方法,其实,还有一个神奇“str”可以利用正则表达式,实现常用的操作,方便而且功能强大。不多说了,看看怎么用吧!

先来看看

Series.str.extract

Extract capture groups in the regex pat as columns in a DataFrame.

For each subject string in the Series, extract groups from the first match of regular expression pat.

Parameters:

pat : str 此处为你的正则表达式

Regular expression pattern with capturing groups.

flags : int, default 0 no flagsflags 编译标志位

Flags from the re module, e.g. re.IGNORECASE, that modify regular expression matching for things like case, spaces, etc. For more details, see re.

expand : bool, default True 如果expand为True返回的为DataFrame列

If True, return DataFrame with one column per capture group. If False, return a Series/Index if there is one capture group or DataFrame if there are multiple capture groups.New in version 0.18.0.

Returns:返回值为DataFrame or Series or Index

A DataFrame with one row for each subject string, and one column for each group. Any capture group names in regular expression pat will be used for column names; otherwise capture group numbers will be used. The dtype of each result column is always object, even when no match is found. If expand=False and pat has only one capture group, then return a Series (if subject is a Series) or Index (if subject is an Index).

一个DataFrame,每个主题字符串有一行,每个组有一列。 正则表达式pat中的任何捕获组名称都将用于列名称; 否则将使用捕获组编号。 即使找不到匹配项,每个结果列的dtype也始终为object。 如果expand = False并且pat只有一个捕获组,则返回Series(如果subject是Series)或Index(如果subject是index)

先来一个实例:

先加载数据:

pandas 文本操作技巧-正则表达式的应用 先来看看extract的解释: 先来一个实例: 正则表达式知识复习:(图1)

假设现在有一种需求:需要提取marital_status的前两位:

pandas 文本操作技巧-正则表达式的应用 先来看看extract的解释: 先来一个实例: 正则表达式知识复习:(图2)

如果不是前两位,选取其中的第三和第四的文本:

pandas 文本操作技巧-正则表达式的应用 先来看看extract的解释: 先来一个实例: 正则表达式知识复习:(图3)

是不是很简单,还有更有意思的,如果需要选取marital_status的“-”的前面的文本,当然也可以用“split”没有这个符号的就忽略,直接选取全部文本,来一起看看如何实现:

pandas 文本操作技巧-正则表达式的应用 先来看看extract的解释: 先来一个实例: 正则表达式知识复习:(图4)

是不是很厉害,还可以直接选取文本中的数字,特殊符号,等等,只要学会正则表达式,编译好你的表达式,什么都可以提取出来,是不是比excel的文本操作简单而且强大,还不来赶快复习一下正则表达式的知识点。

正则表达式知识复习:

正则表达式中常用的字符含义“ .”匹配任意除换行符外的字符在DOTALL模式中也能匹配换行符a.c--abc

转义字符,使后一个字符改变原来的意思 a.c;ac--a.c;ac

“*”匹配前一个字符0或多次 abc*ab--abccc

“+”匹配前一个字符1次或无限次abc+abc--abccc

匹配一个字符0次或1次abc?ab--abc

“^”匹配字符串开头。在多行模式中匹配每一行的开头 ^abc--abc

“$”匹配字符串末尾,在多行模式中匹配每一行的末尾abc$--abc

“ ”或。匹配左右表达式任意一个,从左到右匹配,如果没有包括在中,则它的范围是整个正则表达式abcdef--abc def

“{}”{m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次ab{1,2}cabc--abbc

字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如abc或a-c^abc表示取反,即非abc。所有特殊字符在字符集中都失去其原有的特殊含义。用反斜杠转义恢复特殊字符的特殊含义。abcde--abe ace ade

“)”被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号编号+1.分组表达式作为一个整体,可以后接数量词。表达式中的仅在该组中有效。abc){2}a(123456)c-- abcabc a456c

预定义字符集:d数字:0-9abca1c

D非数字:^daD abc

s匹配任何空白字符:<空格>trfvasca c

S非空白字符:^saScabc

w匹配包括下划线在内的任何字字符:A-Za-z0-9_awcabc

W匹配非字母字符,即匹配特殊字符aWca c

A仅匹配字符串开头,同^Aabcabc

Z仅匹配字符串结尾,同$abcZabc

b匹配w和W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。例如, erb 可以匹配“never” 中的 er,但不能匹配 “verb” 中的 er。babcbab!bc空格abc空格a!bc

B【^b】aBbcabc

flags 编译标志位

用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的flags有:re.S(DOTALL) 使.匹配包括换行在内的所有字符

re.I(IGNORECASE)使匹配对大小写不敏感

re.L(LOCALE)做本地化识别(locale-aware)匹配,法语等

re.M(MULTILINE) 多行匹配,影响^和$

re.X(VERBOSE) 该标志通过给予更灵活的格式以便将正则表达式写得更易于理解

re.U 根据Unicode字符集解析字符,这个标志影响w,W,b,B

来看看大神们的应用:

pandas 文本操作技巧-正则表达式的应用 先来看看extract的解释: 先来一个实例: 正则表达式知识复习:(图5)

pandas 文本操作技巧-正则表达式的应用 先来看看extract的解释: 先来一个实例: 正则表达式知识复习:(图6)

本文相关词条概念解析:

匹配

匹配,一般指配合或搭配,也指结婚。“匹配”一词在不同的领域有着不同的意思,它既是数学语言,又是计算机方面的术语,其含义复杂多变。基本解释【marry】成为夫妇关系。数学术语。配合;搭配。【无线电元器件等】配合;阻抗匹配。【计算机】给定一个图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配。图的匹配。

网友评论
  • 战狼2222
    我要做的就是给你们推荐几个学习正则表达式的利器和网站,剩下的还是靠你们自己去完成
    2019-09-14 05:21 986
  • dongting88
    从这里可以快速入门
    2019-09-17 01:33 417
  • 天龙王子
    正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此,包括我
    2019-09-16 22:49 178
  • vicente11q
    //div,不用熟记,要用的时候会查看的懂就行了
    2019-09-18 12:27 88
  • 梅梅sherry
    做完以后应该就已经掌握正则表达式的用法了
    2019-09-19 16:55 179
  • 刘玲1212
    javascript正则表达式 [\w\W]+ 这样有什么意义?与.+有区别么?
    2019-09-19 00:49 135
  • 1391508626
    //regexr,//jex
    2019-09-22 17:55 979
  • 杜亚辉1381
    你是如何学会正则表达式的?
    2019-09-22 18:05 882