根据熊猫中的特定子字符串或模式分割字符串

时间:2020-01-17 12:44:15

标签: python pandas split

感谢您对我上一个问题的所有帮助。很好用。

现在还有另一个问题要解决。它基于我之前的问题。我已经清理了输入内容,我想分割主要公司名称,并根据一些子字符串或模式将其放在单独的列中。

这是我的输入内容:

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

我的预期输出是:

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除法”,“除法”,“((a),((an),“子公司”,“ C / O””之前的字符串或单词应作为Parent_company放置。

我使用的代码如下:

data['Parent_Company'] = re.sub('A division of','',str(data['Cleansed_Input']))

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

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式进行申请。这样的事情应该起作用:

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)

输出:

                                      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 

说明

最终的正则表达式如下:

(.*?)(\ba division of\b|\bco\b|\bsubsidiary of\b|\bdivision of\b|\ban\b)

(.*?)是我们想要的捕获组。它表示所有字符.*,但尽可能少的次数?。这是必需的,以便它与第一次出现相匹配。否则我们的匹配项

GINGIPAK a division of The Belport Co Inc

将会

GINGIPAK a division of The Belport

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

其余就是我们想要的所有带有OR |的关键字,以便与其中任何一个匹配。我们将\b放在之前和之后,以便它与确切的单词匹配,否则与之匹配

Heuer International A division of GST Corporation Limited

将会

Heuer International A division of GST 

因为在公司中我们有co,但我们只想整体匹配co。

最后,我们进行第一个匹配match.group(1).strip(),即(.*?),并删除结尾的空格。