熊猫字符串提取所有匹配项

时间:2019-05-09 17:41:47

标签: python regex pandas

我正在学习pandas系列字符串方法中的正则表达式操作。我能够从字符串中提取第一个数字,但是我的正则表达式与第二个数字不匹配。如何捕获两个数字?

请注意,第二行,第二个元素是NAN。

代码:

import pandas as pd
df = pd.DataFrame({'a': ["number 1.23 has 1.2 ",
                         "number 12.2 has 12 "]})

pat = r""".+\s+
(\d+\.\d+)
.+
((?:\d+\.\d+)?)
.+"""


df['a'].str.extract(pat,flags=re.X,expand=True)

礼物:

0      1
1.23
12.2

预期:

0    1
1.23 1.2
12.2 NaN

如何修复正则表达式?

我对正则表达式非常陌生,因此请体谅并宽恕我的无知。

1 个答案:

答案 0 :(得分:2)

您可以将.str.findall\d+\.\d+正则表达式一起使用:

>>> df['a'].str.findall(r"\d+\.\d+").to_frame()
             a
0  [1.23, 1.2]
1       [12.2]

或者,

>>> pd.DataFrame(df['a'].str.findall(r"\d+\.\d+").tolist())
      0     1
0  1.23   1.2
1  12.2  None

模式匹配

  • \d+-1个以上数字
  • \.-点
  • \d+-1个以上的数字。

请注意,str.findall不需要将整个模式都用捕获组进行包装,就像.str.extractall一样,也可以在此处使用。