首页 > 解决方案 > 检查熊猫字符串中是否有两个单词相邻

问题描述

让我们假设一个数据框(df),其中包含一个名为“消息”的字符串列,其中包含事务消息。

我们还假设这个变量“消息”中的内容或值就像

  1. '您的借记卡号 XXX 中的 50 卢比信用额度'
  2. '100 卢比记入信用卡'

现在假设我想搜索“消息”是否包含信用卡交易。所以我会搜索关键字“credit”和“card”,如果这两个关键字都出现在消息中,那么它将被归类为信用卡交易。
代码:
df[ (df['message'].str.contains('credit')) & (df['message'].str.contains('card')) ]

但这行代码将返回我上面的两个消息,包括(1)和(2),因为它们都包含关键字'credit'和'card'。但实际上,第一条消息显然不是信用卡交易。它恰好包含两个关键字。那么有人可以通过一起而不是单独检查关键字“信用卡”来帮助我处理只会返回(第二次)交易的代码行吗?

标签: pythonpandasstringdataframecontains

解决方案


你的症结与PANDAS无关;这完全是一个字符串处理问题。减少问题

s = df["Message"].str

现在,您需要找到“credit”,然后是“card”。如果单词之间总是有一个空格,那么只需 `.contains("credit card") 就可以解决您的问题。如果您有其他间距或标点符号,那么您需要在字符串上做更多的工作。

仅对于空格,您可以split字符串并查找相邻的单词:

words = s.split()
for idx, word in enumerate(words[:-1]):    # look for credit in all but the final word
    if word == "credit" and words[idx+1] == "card":
        # You found "credit card" ... process the row

如果您有其他标点符号,则构建列表words以分隔标点符号并删除这些字符;究竟如何取决于您输入中的字符,您没有指定。

这会让你走吗?


推荐阅读