[英]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?
對於可擴展的解決方案,請執行以下操作-
|
str.contains
df1
到索引第 0列,不使用df1[0]
因為這可能會被認為是不明確的)。 最好使用loc
或iloc
(請參見下文)。
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.