簡體   English   中英

包含熊貓字符串列表的str.contains可擴展解決方案

[英]Scalable solution for str.contains with list of strings in pandas

我正在解析包含字符串對象行的pandas數據df1 我有一個關鍵字參考列表,需要刪除df1包含參考列表中任何單詞的每一行。

目前,我這樣做是這樣的:

reference_list: ["words", "to", "remove"]
df1 = df1[~df1[0].str.contains(r"words")]
df1 = df1[~df1[0].str.contains(r"to")]
df1 = df1[~df1[0].str.contains(r"remove")]

不能擴展到數千個單詞。 但是,當我這樣做時:

df1 = df1[~df1[0].str.contains(reference_word for reference_word in reference_list)]

我產生錯誤, 第一個參數必須是字符串或編譯模式

按照解決方案,我嘗試了:

reference_list: "words|to|remove" 
df1 = df1[~df1[0].str.contains(reference_list)]

這不會引發異常,但不會解析所有單詞。

如何有效地使用帶有單詞列表的str.contains?

對於可擴展的解決方案,請執行以下操作-

  1. 通過正則表達式OR管道連接單詞的內容|
  2. 將此傳遞給str.contains
  3. 使用結果過濾df1

到索引 0列,不使用df1[0]因為這可能會被認為是不明確的)。 最好使用lociloc (請參見下文)。

words = ["words", "to", "remove"]
mask = df1.iloc[:, 0].str.contains(r'\b(?:{})\b'.format('|'.join(words)))
df1 = df1[~mask]

注意:如果words是系列,這也將起作用。


另外,如果您的 0列僅是單詞(而不是句子)的列,則可以使用df.isin ,它應該更快-

df1 = df1[~df1.iloc[:, 0].isin(words)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM