首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于pandas中的特定子字符串或模式拆分字符串

基于pandas中的特定子字符串或模式拆分字符串
EN

Stack Overflow用户
提问于 2020-01-17 20:44:15
回答 1查看 99关注 0票数 1

感谢你对我上一个问题的帮助。这是很有用的。

现在有另一个问题,我被困住了。这是基于我之前的问题。我有一个干净的输入,我想拆分主公司名称,并根据一些子字符串或模式将其放在单独的列中。

以下是我的输入:

代码语言:javascript
复制
Original_Input                                                 Cleansed_Input
Iris Diagnostics, a Division of Iris International Inc         Iris Diagnostics a Division of Iris 
                                                               International Inc
GINGI-PAK a division of The Belport Co., Inc.                  GINGIPAK a division of The Belport Co Inc
Plastiflex Healthcare Division of Plastiflex Group NV          Plastiflex Healthcare Division of 
                                                               Plastiflex Group NV
Heuer International (A division of GST Corporation Limited)    Heuer International A division of GST 
                                                               Corporation Limited
Arrow International, Inc. (subsidiary of Teleflex, Inc.)       Arrow International Inc subsidiary of 
                                                               Teleflex Inc
Filtertek, B.V. (An ITW Medical Company)                       Filtertek BV An ITW Medical Company
Fitz c/o YBI                                                   Fitz co YBI

我的预期输出是:

代码语言:javascript
复制
Original_Input                                                 Cleansed_Input
Iris Diagnostics, a Division of Iris International Inc         Iris Diagnostics a Division of Iris International Inc
GINGI-PAK a division of The Belport Co., Inc.                  GINGIPAK a division of The Belport Co Inc
Plastiflex Healthcare Division of Plastiflex Group NV          Plastiflex Healthcare Division of Plastiflex Group NV
Heuer International (A division of GST Corporation Limited)    Heuer International A division of GST Corporation Limited
Arrow International, Inc. (subsidiary of Teleflex, Inc.)       Arrow International Inc subsidiary of Teleflex Inc
Filtertek, B.V. (An ITW Medical Company)                       Filtertek BV An ITW Medical Company
Fitz c/o YBI                                                   Fitz co YBI

Parent_company
Iris Diagnostics
GINGIPAK 
Plastiflex Healthcare 
Heuer International
Arrow International Inc 
Filtertek BV
Fitz 

因此,'A division of','Division of','(a','(an','subsidiary of','C/O‘)前的字符串或单词应作为Parent_company。

我使用的代码片段如下:

代码语言:javascript
复制
data['Parent_Company'] = re.sub('A division of','',str(data['Cleansed_Input']))

我没有得到所需的输出。我希望这些分隔符的字符串结尾为空,只放置公司名称,否则希望将这些分隔符之前的名称拆分并放置为Parent_company。

提前感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-17 21:05:27

您可以使用正则表达式和应用程序来完成此操作。像这样的东西应该是有效的:

代码语言:javascript
复制
import pandas as pd
import re

def get_parent_company(input):
    keywords = ["a division of", "co", "subsidiary of", "division of","an"]
    regex = r"(.*?)(\b{}\b)".format("\\b|\\b".join(keywords))
    matches = re.finditer(regex, input, re.IGNORECASE)
    for match in matches:
        return match.group(1).strip()

df["Parent_Company"] = df["Cleansed_Input"].apply(get_parent_company)
print(df)

输出:

代码语言:javascript
复制
                                      Cleansed_Input           Parent_Company
0  Iris Diagnostics a Division of Iris Internatio...         Iris Diagnostics 
1          GINGIPAK a division of The Belport Co Inc                 GINGIPAK 
2  Plastiflex Healthcare Division of Plastiflex G...    Plastiflex Healthcare 
3  Heuer International A division of GST Corporat...      Heuer International 
4  Arrow International Inc subsidiary of Teleflex...  Arrow International Inc 
5                Filtertek BV An ITW Medical Company             Filtertek BV 
6                                        Fitz co YBI                     Fitz 

解释

最终的正则表达式如下所示:

代码语言:javascript
复制
(.*?)(\ba division of\b|\bco\b|\bsubsidiary of\b|\bdivision of\b|\ban\b)

(.*?)是我们想要的捕获组。它意味着所有的字符都是.*的,但是只有尽可能少的?次数。这是必需的,这样它才能匹配第一次出现的情况。否则我们的匹配

代码语言:javascript
复制
GINGIPAK a division of The Belport Co Inc

将会是

代码语言:javascript
复制
GINGIPAK a division of The Belport

因为最后一个匹配是Co,这也是我们的关键字之一,但我们希望匹配第一个a division of

剩下的关键字都是我们想要的带有OR |的关键字,这样它就可以匹配它们中的任何一个。我们将\b放在前面和后面,这样它就会精确地匹配单词,否则匹配

代码语言:javascript
复制
Heuer International A division of GST Corporation Limited

将会是

代码语言:javascript
复制
Heuer International A division of GST 

因为在公司里我们有co,但我们只想把co作为一个整体来匹配。

最后,我们获取第一个匹配的match.group(1).strip(),即(.*?),并去掉结尾的空格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59787624

复制
相关文章

相似问题

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