如何在 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 运算符?的主要内容,如果未能解决你的问题,请参考以下文章
如何在python pandas数据框中选择和更改数据[重复]