2017-05-30 59 views
1

我有一個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從那個系列。請注意,每行文本中有多個數字。 我已經嘗試過正則表達式,但不是隻給出那些特定的數字,而是正在拾取每行中的所有數字。本質上,我希望數字在 '標記'之後。任何幫助,將不勝感激。

p.s.我現在已經更新了這個問題。我嘗試了這裏給出的解決方案。在事實我試着用

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

但要和空單。這裏的例子與實際問題非常相似,因此我編輯了這篇文章。

很多人提前感謝。

回答

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 
+0

@pythondumb,pl檢查編輯 – Vaishali

+0

感謝A-Za-z,但我又一次獲得了空白系列。可能是我沒有做出正確的做法。 – pythondumb

+0

在我的實際問題中,我首先檢查該系列中是否存在「標記」。如果是,則應用'提取',否則提供NULL。 – pythondumb

1

你需要看後面的語法,它斷言期望的圖案是由另一種模式之前,(?<=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 
+0

感謝Psidom,請儘快修訂的問題。 – pythondumb