在 pandas dataframe python 列中搜索单词

2024-05-05

我有两个文本列,我想查找一列中的单词是否存在于另一列中。我编写了下面的代码,它运行得很好,但它会检测字符串中的任何位置是否存在单词。例如,它将在“ham”中查找“ha”。我想改用正则表达式,但我被困住了。我遇到了这个post https://stackoverflow.com/questions/5319922/python-check-if-word-is-in-a-string并查看了第二个答案,但我无法根据我的目的对其进行修改。我想做类似的事情。

我将不胜感激帮助和/或任何指示

d = {'emp': ['abc d. efg', 'za', 'sdfadsf '], 'vendor': ['ABCD enterprise', 'za industries', '' ]}
df = pd.DataFrame(data=d)
df['clean_empy_name']=df["emp"].str.lower().str.replace('\W', ' ')

def check_subset(vendor, employee):
    s = []
    for n in employee.split():
      # n=" " + n +"[^a-zA-Z\d:]"
      if ((str(n) in vendor.lower()) & (len(str(n))>1)):
        s.append(n)
    return s

check_subset("ABC-xy 54", "54 xy")

df['emp_name_find_in_vendor'] = df.apply(lambda row: check_subset(row['vendor'],row['clean_empy_name']), axis=1)
df
#########update 2

我更新了我的数据框如下

d = {'emp': ['abc d. efg', 'za', 'sdfadsf ','abc','yuma'], 'vendor': ['ABCD enterprise', 'za industries', '','Person Vue\Cisco','U OF M CONTLEARNING' ]}
df = pd.DataFrame(data=d)
df['clean_empy_name']=df["emp"].str.lower().str.replace('\W', ' ')

我使用了第一个答案提供的代码,但失败了

  1. 的情况下'Person Vue\Cisco'它抛出错误error: bad escape \c。如果我删除 \ 中'Person Vue\Cisco',代码运行良好
  2. 的情况下'U OF M CONTLEARNING'它返回u and m当他们明显不匹配时

是的你可以!这会有点混乱,所以让我分几步来构建:

首先,我们为单个情况创建一个正则表达式check_subset("ABC-xy 54", "54 xy"):

  • 我们将使用re.findall(pattern, string)找到所有出现的pattern in string
  • The regex pattern will basically say "any of the words":
    • 对于“任何”,我们使用|(或)运算符
    • 为了构造单词,我们需要使用括号将其组合在一起......但是,括号(word)创建一个跟踪组,这样我们以后就可以调用重用这些组,因为我们不感兴趣,我们可以通过添加来创建一个非捕获组?:如下:(?:word)
import re

re.findall('(?:54)|(?:xy)', 'ABC-xy 54')
# -> ['xy', '54']

现在,我们必须构建pattern每一次:

  • 分成单词
  • 将每个单词包装在非捕获组内(?:)
  • 通过以下方式加入所有这些群组|
re.findall('|'.join(['(?:'+x+')' for x in '54 xy'.split()]), 'ABC-xy 54')

一件小事,由于最后一行的供应商是空的,并且您似乎不需要匹配(从技术上讲,空字符串与所有内容匹配),我们必须添加一个小检查。所以我们可以将你的函数重写为:

def check_subset_regex(vendor, employee):
    if vendor == '':
        return []

    pattern = '|'.join(['(?:'+x+')' for x in vendor.lower().split(' ')])
    return re.findall(pattern, employee)

然后我们可以用同样的方式应用:

df['emp_name_find_in_vendor_regex'] = df.apply(lambda row: check_subset_regex(row['vendor'],row['clean_empy_name']), axis=1)

最后一条评论是,您的解决方案匹配部分单词,因此员工 Tom Sawyer 会将“Tom”与供应商“Atomic S.A.”匹配。我在这里提供的正则表达式函数不会将其作为匹配项,如果您想这样做,正则表达式会变得更复杂一些。


EDIT:删除供应商的标点符号

您可以像使用 clean_employee 那样添加一个新列,或者简单地将删除添加到函数中,如下所示(您将需要import string得到string.punctuation,或者只是在其中添加一个包含您要替换的所有符号的字符串):

def check_subset_regex(vendor, employee):
    if vendor == '':
        return []

    clean_vnd = re.sub('[' + string.punctuation + ']', '', vendor)

    pattern = '|'.join(['(?:'+x+')' for x in clean_vnd.lower().split(' ')])
    return re.findall(pattern, employee)

本着授之以鱼的精神:),在正则表达式中[]表示这些字符中的任何一个......所以[abc]会是一样的a|b|c.

So the re.sub行将替换任何出现的string.punctuation(其评估结果为!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~) 字符由 a''(删除它们)。


EDIT2:在每个搜索词末尾添加单个非字母数字字符的可能性:

def check_subset_regex(vendor, employee):
    if vendor == '':
        return []

    clean_vnd = re.sub('[' + string.punctuation + ']', '', vendor)

    pattern = '|'.join(['(?:'+x+'[^a-zA-Z0-9]?)' for x in clean_vnd.lower().split(' ')])
    return re.findall(pattern, employee)

在本例中我们使用:
- ^作为 a 中的第一个字符[](称为字符类),表示除字符类中指定的字符之外的任何字符,例如[^abc]会匹配anything那不是a or b or c (so d,或空格,或@) - 以及?,这意味着前面的符号是可选的...

So, [^a-zA-Z0-9]?表示可选的单个非字母数字字符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 pandas dataframe python 列中搜索单词 的相关文章

  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 当下面没有记录时隐藏组标题

    当组头在该页中没有记录时 是否可以在第 3 8 页中抑制组头 这是问题的解决方案 但您必须调整其他内容以保持每个页面的组标题重复 主要思想是将组标题模拟为详细信息部分 并仅与组的第一条记录一起显示 一步步 创建一个运行总计字段来计算组中的记
  • NVD3/D3改变y轴最小值

    我目前正在使用 NVD3 制作一些折线图 我想知道是否可以使 y 轴刻度始终从 0 开始 目前它始终从最低的 y 值开始 我尝试过使用tickValues 但我不想更改其他值 我还尝试添加值为 0 的数据点 但这似乎是一种解决方法 它会影响
  • 如何在 iPhone 应用程序中与 Modbus 设备通信?

    我希望能够开发一个可以与 Modbus 设备通信的 iPhone 应用程序 但我不知道如何继续 有没有人有这方面的经验 或者是否有用于此目的的现有图书馆 您首先需要知道如何在您的 iPhone 上创建一个简单的 TCP 客户端 以及如何在您
  • 如何获得“irb(main):001:0>”提示而不是“>>”

    我的 Mac 上预装了 Ruby 所以我想看看它 我注意到的第一件事是 irb 提示 gt gt 而不是 irb main 001 0 gt 我找不到任何关于如何通过 Google 更改此设置的信息 因为每个人都在其代码中使用 irb ma
  • 即使引用了 Typescript 也找不到名称

    我有一个用打字稿编写的有角度的项目 这在 VS 下对我来说效果很好 现在我在 webstorm 下尝试使用 Node JS 进行同样的操作 我在progressor ts 文件中有一个progressor 类 export class Pr
  • Restful服务参数不匹配异常

    我有服务 POST Path post Consumes application json public Response createProductInJSON Product product String result Product
  • 获取 BLOB 的二进制内容

    我知道 为了将 BLOB 对象转换为 Javascript 中的可读格式 URL 我应该使用 createObjectURL 方法 对吧 例子 var blob new Blob Example type text plain url wi
  • TestCafe - 浏览器在测试之间总是以干净的状态启动。如何覆盖它以便浏览器记住缓存、用户设置和存储

    测试之间的浏览器始终以干净的状态打开 登录在我的应用程序中被记住 因为身份验证仍然存在 但由于浏览器始终以干净的状态打开 我必须在所有夹具的 Before 挂钩中执行登录 有什么方法可以打开浏览器以便记住用户设置 缓存 本地和会话存储吗 T
  • 从 pandas 数据帧创建 BigQuery 表,无需显式指定架构

    我有一个 pandas 数据框 想从中创建一个 BigQuery 表 我知道有很多帖子询问这个问题 但到目前为止我能找到的所有答案都需要明确指定每列的架构 例如 from google cloud import bigquery as bq
  • Prisma 1 到 2 迁移问题:P4001 内省数据库为空

    因此 我一直在尝试在现有数据库上运行内省过程 如下所示 npx prisma introspect 并收到以下错误跟踪 0 info it worked if it ends with ok 1 verbose cli C Program
  • 无法在 Android MediaRecorder 中设置手动视频大小

    我正在Android中使用MediaRecorder来录制视频 我当前的参数是 mMediaRecorder setAudioSource MediaRecorder AudioSource DEFAULT mMediaRecorder s
  • 在 unnest_wider 之后命名提升向量中的列

    在使用 tidyr 1 0 的一些新功能时 我遇到了一些令人头疼的问题 我用过boxplot stats获取我想用来绘制的箱线图值向量 我已经成功地完成了此操作 但我相信有更好的方法来命名新的未嵌套向量的列 这是当前设置 library t
  • 重复符号_OBJC_CLASS_$_LoginController

    我知道这个问题以前已经被问过很多次了 但到目前为止还没有解决我的问题 我知道当您在项目中获得文件的多个副本时 会发生此错误 我尝试清理构建 删除任何登录控制器 m文件输入编译源然后构建 很好 没有错误 当我在编译源中添加 LoginCont
  • 控制台界面教程和提示 (pdcurses)

    我正在寻找有关使用 PDCurses 库的教程 不幸的是 只有文本文档 这更像是函数参考 pdcurses 是否与 ncurses 足够相似以使用 ncurses 教程 关于制作控制台 UI 的任何提示 附言 PDCurses mingw3
  • Vagrant - Homestead 设置多个站点

    我已经使用 homestead yaml 映射了文件夹等 ip 192 168 10 10 folders map Users User Desktop folder Homestead First to home vagrant Firs
  • 使用EF Core调用存储过程并关闭连接

    我有一个使用 EF Core 的 ASP NET Core 2 2 应用程序 我有一个服务类 通常使用DbContext用于任何 CRUD 操作 然而 在其中一种方法中 Assign下面的方法 我需要使用存储过程 所以我使用以下代码 注意D
  • 在重复键上仅更新 Null 或空值

    我有一个 mysql 查询来合并主键 IMO 上的两个表 查询工作正常 但我遇到的问题是在重复键更新时 我只想更新 wp second 表的那些没有值的字段 简而言之 在重复键上 wp second 值仅应在 null 或空时更新 这是我到
  • polyfit numpy 的反向输出

    我使用了 numpy 的 polyfit 并获得了两个数组 x 和 y 的非常好的拟合 使用七阶多项式 我的关系是这样的 y x p 0 x 7 p 1 x 6 p 2 x 5 p 3 x 4 p 4 x 3 p 5 x 2 p 6 x 1
  • UCM 中的复合基线是什么以及何时使用它?

    UCM 中的综合基线是什么 什么时候会用到 主要是当我们有多个组件的时候才会使用它吗 关于 复合基线 的参考文献是 在 UCM 中使用复合基线的最佳实践 http www ibm com developerworks rational li
  • 在 pandas dataframe python 列中搜索单词

    我有两个文本列 我想查找一列中的单词是否存在于另一列中 我编写了下面的代码 它运行得很好 但它会检测字符串中的任何位置是否存在单词 例如 它将在 ham 中查找 ha 我想改用正则表达式 但我被困住了 我遇到了这个post https st