如何在包含文本的pandas系列的每一行中提取特定数字

时间:2017-05-30 01:47:49

标签: python pandas

我有一个pd.Series如下所示

O     some texts...final exam marks:50 next level:10
1     some texts....final exam marks he has got:54 next level:15
2     some texts...final marks ...some texts: 45 next best level:20

我想从该系列中提取那些数字50,54,45。请注意,每行的文本中有多个数字。 我已经尝试过正则表达式,但它不是只提供那些特定的数字,而是取出每一行中的所有数字。基本上我想要在这个词之后的数字 '马克&#39 ;.任何帮助将不胜感激。

P.S。我现在更新了这个问题。我尝试了这里给出的解决方案。事实上我试过

pd.Series.str.findall('?<=specific text *(\d{2})')

但是获得并清空列表。这里示例的表示与实际问题非常相似,因此我编辑了帖子。

许多人提前感谢。

2 个答案:

答案 0 :(得分:2)

尝试

s.str.extract('.*marks:\s?(\d+)', expand = False)


0    50
1    54
2    45

随着更新:

s.str.extract('.*marks.*?(\d+)', expand = False)

这个正则表达式考虑了标记

之后可能有或没有字符的事实

你得到了

0    50
1    54
2    45

答案 1 :(得分:1)

您需要查看语法(?&lt; =),其中断言所需的模式前面有另一个模式,(?<=marks:) *([0-9]+)标记后提取数字:后跟可选空格:

s
#0         some texts...final exam marks:50 next lev...
#1         some texts....final exam marks:54 next le...
#2         some texts...final marks: 45 next best le...
#Name: 1, dtype: object

s.str.extract("(?<=marks:) *([0-9]+)", expand=False)

#0    50
#1    54
#2    45
#Name: 1, dtype: object