假設我想洗掉Pandas資料框架列中每個字串中的 "樹 "字。
我將在一個串列中指定我想要洗掉的子串。然后在該列上使用replace和join,如下所示:
remove_list = [' rees' ]
df['column'] = df['column'].str.replace('|')。 join(remove_list ), '', regex=True).str.strip( )
我在tree上添加一個s的原因是,可能會有treehouse或backstreet這樣的詞。所以我想只替換以空格結尾的單詞,這樣我就不會出現 "house "或 "backst "這樣的單詞。
但是我注意到,當我運行這段代碼時,它錯過了位于字串末尾的 "tree",因為它后面沒有空格。因此,它并沒有被洗掉。有什么想法可以讓我解決這些問題嗎?
uj5u.com熱心網友回復:
實際上,我認為你想要的邏輯是:
remove_list = ['tree'/span>]
terms = r's*(?: ' '|'.join(remove_list) r')s*'
df['column'] = df['column'].str。 replace(term, ' ', regex=True).str.strip()
注意,上面使用的regex模式是,對于一個詞的術語串列,s*(?:tree)s*。 這將只匹配準確的單詞tree,而不是當tree作為另一個單詞的子串出現時。 我們還試圖抓住該詞兩邊的任何空格。 然后,我們只用一個空格來替換,并修剪該列以確保在開始或結束時沒有雜散的空格。
編輯:
為了解決 @user2357112 提出的邊緣案例,請考慮以下輸入:
apple tree tree squirrel
在這種情況下,上述解決方案會在apple和squirrel之間留下兩個空格。 我們可以通過擴展我們的重合模式以允許多個連續的關鍵詞匹配來解決這個問題:
terms = r's*(?:'/span> '|'/span>. join(remove_list) r')(?: (?: ' '|'.join(remove_list) r') )*s*'
df['column'] = df['column'].str. replace(term, ' ', regex=True).str.strip()
在這里,我們使用以下的regex模式:
s*b(?:tree)b(?: b(?:tree))*s*
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332468.html
標籤:
上一篇:Laravel如何顯示相關產品?
