【问题标题】:Pandas - using isin to return if column contains any values in a list, rather than allPandas - 如果列包含列表中的任何值,而不是全部,则使用 isin 返回
【发布时间】:2018-10-25 14:51:55
【问题描述】:

抱歉,这是一个基本的问题,对 python/pandas 来说很新。

我正在尝试从我的数据库中创建一个列,该列返回 True 或 False,以判断另一列是否包含字符串列表中的任何(不是全部)字符串。目前我的代码如下所示:

keywords_list = ["foo, bar, ..etc]

df['relevant'] = df['Description'].isin(keywords_list)

我知道我的“描述”列包含列表中的一些值,但它全部返回为假。我看过类似的stackoverflow问题(见下文),他们都说要做我正在做的事情。但是 pandas 文档(也在下面)说 isin 仅在它包含列表中的所有值时才有效。如果列包含列表中的任何值,我可以使用返回的函数吗?请帮忙!

Filter out rows based on list of strings in Pandas https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html

【问题讨论】:

  • 描述列是什么样子的?

标签: python pandas


【解决方案1】:

使用pandas.Series.str.contains

df['Description'].str.contains('|'.join(keywords_list))

【讨论】:

  • 效果很好,感谢您的高效解决方案!
【解决方案2】:

您可能必须使用 split 分隔单词,然后使用 isin

df = pd.DataFrame({'Description': ['foo bar blah', 'new foo', 'newfoo', 'bar']})
keywords_list = ["foo", "bar"]

df['Description'].str.split(expand = True).isin(keywords_list).any(1)

0     True
1     True
2    False
3     True

【讨论】:

  • 您的代码失败:temp_df = pd.DataFrame({"Fruits":["apple","apple mango","papaya","orange","watermelon","pineapple mango"]}) filter1 = temp_df['Fruits'].str.split(expand = True).isin(["apple","mango"]).any() print(filter1) 给出了一系列不等长
  • @Hayat,感谢您的指出。 DataFrame.any() 应该在轴 1 上,而不是默认轴 0。
  • 感谢您的验证。随意投票评论。如果有帮助
猜你喜欢
  • 2018-08-18
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2021-12-16
  • 2020-11-13
  • 1970-01-01
  • 2023-01-07
相关资源
最近更新 更多