首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中将相似的字符串分组为一个组

在python中将相似的字符串分组为一个组
EN

Stack Overflow用户
提问于 2018-04-06 08:11:31
回答 1查看 1.4K关注 0票数 2

我的数据框里有大约30,000个银行的名字。我想将它们归入一个基组,因为它们中的大多数都是相同的,只是它们位于不同的位置。然而,我不知道那里有哪些银行名称。

下面给出的是数据集的一个子集。从这些数据中,我可以识别出两家银行,即皇家银行和巴克莱银行。所以我想要2组。

皇家银行(计数:13)巴克莱(计数:7)

代码语言:javascript
复制
ROYAL BANK OF CANADA
ROYAL BANK OF CANADA
THE ROYAL BANK OF SCOTLAND PLC
THE ROYAL BANK OF SCOTLAND PLC
ROYAL BANK OF CANADA CAYMAN ISLANDS
RBC ROYAL BANK (TRINIDAD AND TOBAGO), LTD.
RBC ROYAL BANK (TRINIDAD AND TOBAGO), LTD.
THE ROYAL BANK OF SCOTLAND INTERNATIONAL, LTD.
THE ROYAL BANK OF SCOTLAND INTERNATIONAL LTD.
ROYAL BANK OF SCOTLAND, N.V.
RBC ROYAL BANK (BAHAMAS), LTD.
ROYAL BANK OF SCOTLAND PLC
ROYAL BANK OF SCOTLAND PLC
BARCLAYS BANK PLC
BARCLAYS BANK DELAWARE
BARCLAYS BANK OF GHANA, LTD.
BARCLAYS BANK DELAWARE
BARCLAYCARD GERMANY
BARCLAYS BANK PLC
BARCLAYS BANK PLC

还有其他银行也有类似的模式,我希望有一个通用的方法来识别列表中唯一的组(银行名称),并在这些组下分组类似的组。

EN

回答 1

Stack Overflow用户

发布于 2018-04-06 18:56:54

你想要这样的东西吗?

代码语言:javascript
复制
[ ROYAL BANK ]
ROYAL BANK OF CANADA
ROYAL BANK OF CANADA
THE ROYAL BANK OF SCOTLAND PLC
THE ROYAL BANK OF SCOTLAND PLC
ROYAL BANK OF CANADA CAYMAN ISLANDS
RBC ROYAL BANK (TRINIDAD AND TOBAGO), LTD.
RBC ROYAL BANK (TRINIDAD AND TOBAGO), LTD.
THE ROYAL BANK OF SCOTLAND INTERNATIONAL, LTD.
THE ROYAL BANK OF SCOTLAND INTERNATIONAL LTD.
ROYAL BANK OF SCOTLAND, N.V.
RBC ROYAL BANK (BAHAMAS), LTD.
ROYAL BANK OF SCOTLAND PLC
ROYAL BANK OF SCOTLAND PLC

[ BARCLAY ]
BARCLAYS BANK PLC
BARCLAYS BANK DELAWARE
BARCLAYS BANK OF GHANA, LTD.
BARCLAYS BANK DELAWARE
BARCLAYCARD GERMANY
BARCLAYS BANK PLC
BARCLAYS BANK PLC

使用的正则表达式为

代码语言:javascript
复制
(?m)^\s*([A-Z\s]*?(?:(ROYAL BANK)|(BARCLAY)).*)$

Demo,,,,其中匹配的银行名称被捕获到group 1detected keyword(ROYAL BANK, BARCLAY)被捕获到group 2group 3,以便在python脚本中使用它们按名称对银行进行分类。

下面的python脚本可能会解释一些关于name classification的基本概念。

代码语言:javascript
复制
import re
ss=""" copy & paste sample text in this area """

royalbank=[]
barclay=[]
regx= re.compile(r'(?m)^\s*([A-Z\s]*?(?:(ROYAL BANK)|(BARCLAY)).*)$')
matching=regx.findall(ss)
for m in matching:
    if m[1] !="":
        royalbank.append(m[0])
    elif m[2] !="":
        barclay.append(m[0])

print("\n[ ROYAL BANK ]")
for e in royalbank: print(e)
print("\n[ BARCLAY ]")
for e in barclay: print(e)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49683370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档