目標:用que_textre.search 模式的匹配替換列中的值。別的None
問題:盡管正則運算式模式已經過全面測驗,但只接收列中的None值que_text_new!
def override(s):
x = re.search(r'(an|frage(\s ich)?)\s d(i|?)e\s Staatsreg(i|?)erung(.*)(Dresden(\.|,|\s )?)?', str(s), flags = re.DOTALL | re.MULTILINE))
if x :
return x.group(5)
return None
df2['que_text_new'] = df2['que_text'].apply(override)
我究竟做錯了什么?洗掉return None沒有幫助。我假設我的函式中一定存在一些結構性錯誤。
uj5u.com熱心網友回復:
您可以使用具有單個捕獲組的模式,然后簡單地使用Series.str.extract和鏈.fillna(np.nan)來填充不匹配的值NaN:
pattern = r'(?s)(?:an|frage(?:\s ich)?)\s d[i?]e\s Staatsreg[i?]erung(.*)'
df2['que_text_new'] = df2['que_text'].astype(str).str.extract(pattern).fillna(np.nan)
不確定您是否需要.astype(str),但是str(s)您的代碼中有 ,因此這部分可能更安全。
這里,
- 使用單字符替代捕獲組被轉換為字符類,例如
(i|?)->[i?] - 其他捕獲組被轉換為非捕獲組,即
(->(?:。 - 為了
np.nan作業不要忘記import numpy as np。 (?s)是模式內re.DOTALL選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350787.html
上一篇:更新行的替代方法
