如何在 pandas 数据框中组合 AND 和 OR 运算符?

Posted

技术标签:

【中文标题】如何在 pandas 数据框中组合 AND 和 OR 运算符?【英文标题】:How do I combine the AND and OR operator in a pandas data frame? 【发布时间】:2015-11-11 08:25:48 【问题描述】:

我的目标是找出某些关键字组合是否可能出现在填充文本字符串(新闻文章标题)的列中。然后我想在条形图中绘制频率。

我使用 pandas 数据框完成了以下操作:

pvv_news = df[df['desc'].str.contains("pvv", case=True)]
pvv_month = win.groupby(win.index.month).size()
pvv_month.index = ['January', 'February', 'March', 'April', 'May', 'June']
pvv_month.plot(kind='bar')

这给出了:

现在,我想不通的是如何组合 AND 和 OR 以获得更具体的结果。我想到的但不起作用的示例:

pvv_news = df[df['desc'].str.contains("(pvv)&(nederland|overheid)", case=True)]

我查看了以下函数,但无法弄清楚:

pandas.Series.str.extract pandas.Series.str.match pandas.Series.str.contains 正则表达式结合上述函数。

【问题讨论】:

【参考方案1】:

如果我按照你想要做的,这应该工作:

pvv_news = df[(df['desc'].str.contains("pvv"), case = True) &
              ((df['desc'].str.contains("nederland"), case = True) |  
               (df['desc'].str.contains("overheid"), case = True)) ]

【讨论】:

这正是我想要做的,谢谢!一般来说,您会说这是在使用 Pandas 时在字符串中搜索关键字的合乎逻辑的方式吗?当我要查找的关键字不是字符串中的完整单词时,我是否需要使用正则表达式?即:关键字:American,字符串:Amercians 我认为您可以将其简化为:pvv_news = df[(df['desc'].str.contains("pvv"), case = True) & (df['desc'].str.contains("nederland|overheid"), case = True) ] @EdChum 是的,我已经这样做了,它有效。我不得不说我不明白允许背后的逻辑 |但不是 & 在 "" 里面。 @Lam 您应该能够将正则表达式作为模式传递,并且只需使用单个 contains 调用 @EdChum 这里:pandas.pydata.org/pandas-docs/stable/generated/… 它说当你想在 str.contains 中使用正则表达式时使用 re.search。使用 re.search 应该遵循 re.search(pattern, string, flags=0) (docs.python.org/2/library/re.html#re.search)。这种情况下怎么给字符串参数呢?

以上是关于如何在 pandas 数据框中组合 AND 和 OR 运算符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在支持多种数据格式的 Pandas 中合并日期?

如何在python pandas数据框中选择和更改数据[重复]

如何从 imdb 获取更多信息并将其保存在 pandas 数据框中? [复制]

如何将网站上所有抓取的数据保存在 pandas 数据框中?

如何在 Pandas 数据框中按行值对日期时间列进行排序?

如何根据 pandas 数据框中的数据类型填充 NaN 值?