【问题标题】:String lookup failed on Iteration over a list using pandas dataframe使用 pandas 数据框对列表进行迭代时字符串查找失败
【发布时间】: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


【解决方案1】:

在此处添加有效的答案:

badWords= ['random stuff','code words','secret squirrel','blue','black','dave']
for word in badWords:
    df = df[~df.Owner_Name.str.contains(word,case=False)]
    print('Total Rows Left',df.shape[0], word)

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 2022-09-22
    • 2021-10-13
    • 2022-01-01
    • 2015-10-10
    • 2017-11-05
    • 2017-10-08
    • 1970-01-01
    相关资源
    最近更新 更多