簡體   English   中英

根據pandas中的特定子字符串或模式拆分字符串

[英]Split a string based on specific substring or pattern in pandas

感謝您對我上一個問題的所有幫助。 它很好用。

現在還有另一個問題。 它基於我之前的問題。 我有我的清理輸入,我想拆分主要公司名稱並根據某些子字符串或模式將其放在單獨的列中。

這是我的輸入:

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 Division of', 'Division of', '(a', '(an', 'subsidiary of', 'C/O' 之前的字符串或單詞應該被視為Parent_company。

我使用的一段代碼如下:

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

我沒有得到所需的輸出。 我希望來自這些分隔符的字符串以空白結尾,並且只放置公司名稱,或者希望將這些分隔符之前的名稱拆分並放置為 Parent_company。

在此先感謝您的幫助。

您可以使用正則表達式來實現。 這樣的事情應該工作:

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 

因為在Corporation我們有co,但我們只想匹配co作為一個整體。

最后,我們取第一個匹配項match.group(1).strip() ,即(.*?)並刪除結尾的空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM