【发布时间】:2019-05-21 16:02:40
【问题描述】:
我有一个字符串列表,我试图在 pandas DF 列中搜索并删除包含该列表元素的任何行。
这是搜索特定列的代码,然后删除包含引号中文本子字符串的行。在这种情况下,将删除 Owner_Name 列中包含“dave”的所有行。这本身就很好用,完全符合预期。
df = df[~df.Owner_Name.str.contains('dave')
当我尝试在大约 54 个元素的列表上自动执行此操作时,它会挂起并且只删除一些,但不是全部。知道为什么吗? 这是我的简单循环代码(模拟显示我在做什么,而不是我的实际代码):
badWords= ['random stuff','code words','secret squirrel','blue','black','dave']
for word in badWords:
df = df[~df.Owner_Name.str.contains(word)]
print('Total Rows Left',df.shape[0], word)
我没有收到任何错误,但它肯定不会像我想要的那样工作。例如,在循环之后,在 Owner_Name 列中仍然存在“dave”元素,即使它应该循环通过列表。我什至放了面包屑来调出正在传递的元素,所以它正在循环,但好像 str.contains('') 无法正常工作以删除行。我确保在 df 中也使所有内容都与我的列表对象的情况相匹配,所以这不应该是一个问题。我真的很难过,在堆栈上找不到关于这个特定问题的任何内容。
【问题讨论】:
-
如果字符串完全匹配,请尝试
df = df[~df.Owner_Name.str.contains('dave', regex=False)。还有case=False如果不区分大小写 -
感谢 anky,无论出于何种原因,case = False 都有效。我已将此应用于数据框列以尝试解决此问题: df['Owner_Name'].str.lower() 显然它没有用。再次感谢您的快速回答!
-
欢迎。我已经添加了有效的答案,以便人们以后可以关注,如果需要,请随时编辑。 :)
标签: string pandas loops dataframe contains