我正在解析包含字符串对象行的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)]
我产生错误第一个参数必须是字符串或编译模式。
在this解决方案之后,我尝试了:
reference_list: "words|to|remove"
df1 = df1[~df1[0].str.contains(reference_list)]
哪个不会引发异常,但不会解析所有单词。
如何有效地将str.contains与单词列表一起使用?
答案 0 :(得分:4)
对于可扩展的解决方案,请执行以下操作 -
|
str.contains
df1
要索引0 th 列,请不要使用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 th 列只是一列单词(不是句子),那么您可以使用df.isin
,这应该更快 -
df1 = df1[~df1.iloc[:, 0].isin(words)]