我正在学习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
如何修复正则表达式?
我对正则表达式非常陌生,因此请体谅并宽恕我的无知。
答案 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
一样,也可以在此处使用。