python - 检查熊猫字符串中是否有两个单词相邻
问题描述
让我们假设一个数据框(df),其中包含一个名为“消息”的字符串列,其中包含事务消息。
我们还假设这个变量“消息”中的内容或值就像
- '您的借记卡号 XXX 中的 50 卢比信用额度'
- '100 卢比记入信用卡'
现在假设我想搜索“消息”是否包含信用卡交易。所以我会搜索关键字“credit”和“card”,如果这两个关键字都出现在消息中,那么它将被归类为信用卡交易。
代码:
df[ (df['message'].str.contains('credit')) & (df['message'].str.contains('card')) ]
但这行代码将返回我上面的两个消息,包括(1)和(2),因为它们都包含关键字'credit'和'card'。但实际上,第一条消息显然不是信用卡交易。它恰好包含两个关键字。那么有人可以通过一起而不是单独检查关键字“信用卡”来帮助我处理只会返回(第二次)交易的代码行吗?
解决方案
你的症结与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
以分隔标点符号并删除这些字符;究竟如何取决于您输入中的字符,您没有指定。
这会让你走吗?
推荐阅读
- visual-studio-code - 为什么我的输出末尾有 % 符号?
- c# - 如何在 C# 中基于标记的 VLAN 建立 TCP 连接?
- sql - 使用变量过滤器更快地进行 PostgreSQL 查询
- angular - 突出显示primeng表中的选定行而不选中复选框
- python - Django:在应用程序中更改根 URL
- kong - Kong - 删除服务
- chatbot - 使用 rasa x 的集成版本控制功能,将使用 rasa 版本 1.10.6 构建的 rasa 项目连接到最新的 rasa x 版本(0.35.x)
- python - 如何在不删除标签的情况下解析 XML 文件?
- javascript - 有没有办法检查我点击的元素是否将我重定向到另一个页面?
- terraform - 如何在 Terraform 中为 Azure CosmosDB 定义子网