Pandas 字符串操作(extract 和 findall)

Pandas string operations (extract and findall)

这是Python数据科学手册中关于字符串操作方法的2个例子,我很难理解。

  1. str.extract()
monte = pd.Series(['Graham Chapman', 'John Cleese', 'Terry Gilliam',
                              'Eric Idle', 'Terry Jones', 'Michael Palin'])
monte.str.extract('([A-Za-z]+)')

此操作returns Series 中每个元素的名字。我在提取函数中没有得到表达式输入。

  1. str.findall()
monte.str.findall(r'^[^AEIOU].*[^aeiou]$')

此操作 returns 如果原始元素以辅音开头和结尾,则 returns 否则为空列表。我认为 ^ 运算符代表元音的否定。 *运算符结合了元音大小写的情况。 然而,我不明白其余的运营商。

请帮助我理解这些输入表达式。提前致谢。

第一个^表示在字符串的开头,而$表示在字符串的结尾,举个例子:

>>> import re
>>> s = 'a123a'
>>> re.findall('^a', s)
['a']
>>> 

这只打印一个 a 因为我有 ^ 符号,它只能在字符串的开头找到。

这和$一样,$只从字符串末尾开始找东西,这里是一个例子:

>>> import re
>>> s = 'a123a'
>>> re.findall('a$', s)
['a']
>>> 

已编辑:

r的意思是原始字符串。原始字符串就是它的样子。例如,反斜杠 \ 不会转义,它只是一个常规反斜杠。

你的第一个例子:

'([A-Za-z]+)'

指的是由'()'标记的组,其中包含大小写字符的任意组合(方括号之间的值)。括号后面的 + 号表示您需要其中一个或多个。所以它基本上匹配任何字母组合,直到它找到一个 'non'-字母,在你的例子中,它是名字和姓氏之间的 space。因此,正则表达式 returns 每行的名字。

第二个例子:

'^[^AEIOU].*[^aeiou]$'

第一个 ^ 表示字符串的开头,然后方括号中的第二个 ^ 表示您提到的否定(因此匹配除方括号中的内容之外的任何内容)。所以这里的第一部分意味着你的匹配应该以大写非元音字母开头。然后是 .* ,其中 '.'表示任何字符(换行符除外;因此这不再与您的辅音相关)并且“*”表示它们的零个或多个值。到目前为止,您的正则表达式是这样说的:以大写非元音字母开头,后跟字母的任意组合。最后一部分:'[^aeiou]$' 表示您的字符串应以小写非元音字母结尾。这是由表示字符串结尾的 $ 符号决定的。

所以是的,在这里您实际上只返回以大写辅音开头并以小写辅音结尾的匹配项。