从公司名称获取后缀列表

时间:2016-10-14 17:53:27

标签: python pandas

我有一个带有列名的数据框df - 公司。公司名称的几个例子是:ABC Inc.,XYZ Gmbh,PQR Ltd,JKL Limited等。我想要所有后缀的列表(Inc.,Gmbh,Ltd.,Limited等)。请注意,后缀长度总是不同的。可能有没有任何后缀的公司,例如:Apple。我需要所有公司名称中所有后缀的完整列表,在列表中只保留唯一的后缀。

我如何完成这项任务?

4 个答案:

答案 0 :(得分:2)

试试这个:

Private Sub CommandButton1_Click()

    Dim oWBWithColumn As Workbook: Set oWBWithColumn = Application.Workbooks.Open("C:\Users\khanr1\Desktop\CodeUpdateTest\Test01.xlsx")
    Dim oWS As Worksheet: Set oWS = oWBWithColumn.Worksheets("Sheet2")

    ThisWorkbook.Worksheets("Sheet1").Range("B2").Value = Application.WorksheetFunction.CountIf(oWS.Range("B:B"), "YES")

    oWBWithColumn.Close False

    Set oWS = Nothing
    Set oWBWithColumn = Nothing

End Sub

或忽略标点符号:

In [36]: df
Out[36]:
         Company
0         Google
1      Apple Inc
2  Microsoft Inc
3       ABC Inc.
4       XYZ Gmbh
5        PQR Ltd
6    JKL Limited

In [37]: df.Company.str.extract(r'\s+([^\s]+$)', expand=False).dropna().unique()
Out[37]: array(['Inc', 'Inc.', 'Gmbh', 'Ltd', 'Limited'], dtype=object)

将结果导出到Excel文件中:

In [38]: import string

In [39]: df.Company.str.replace('['+string.punctuation+']+','')
Out[39]:
0           Google
1        Apple Inc
2    Microsoft Inc
3          ABC Inc
4         XYZ Gmbh
5          PQR Ltd
6      JKL Limited
Name: Company, dtype: object

In [40]: df.Company.str.replace('['+string.punctuation+']+','').str.extract(r'\s+([^\s]+$)', expand=False).dropna().unique()
Out[40]: array(['Inc', 'Gmbh', 'Ltd', 'Limited'], dtype=object)

答案 1 :(得分:2)

您可以使用cleanco Python库,其中包含所有可能后缀的list。例如。它包含您提供的所有示例(Inc,Gmbh,Ltd,Limited)。

因此,您可以从库中获取后缀并将其用作字典来搜索数据,例如:

import pandas as pd
company_names = pd.Series(["Apple", "ABS LLC", "Animusoft Corp", "A GMBH"])
suffixes = ["llc", "corp", "abc"]  # take from cleanco source code
found = [any(company_names.map(lambda x: x.lower().endswith(' ' + suffix))) for suffix in suffixes]
suffixes_found = [suffix for (suffix, suffix_found) in zip(suffixes, found) if suffix_found]
print suffixes_found  # outputs ['llc', 'corp']

答案 2 :(得分:0)

所以你想要公司名称的最后一个字,假设公司的名称长度超过一个字?

set(name_list[-1] for name_list in map(str.split, company_names) if len(name_list) > 1)

[-1]获得最后一个字。 str.split分隔空格。我从未使用过大熊猫,因此获取company_names可能是其中最难的部分。

答案 3 :(得分:0)

只有当公司名称包含多个单词时,才会添加后缀。

company_names = ["Apple", "ABS LLC", "Animusoft Corp"]
suffixes = [name.split()[-1] for name in company_names if len(name.split()) > 1]

现在考虑到这并不能满足这一独特要求。 这并不意味着您可以拥有一家名为" Be Smart"和#34; Smart"不是后缀,而是名称的一部分。然而,这照顾了独特的要求:

company_names = ["Apple", "ABS LLC", "Animusoft Corp", "BBC Corp"]
suffixes = []
for name in company_names:
    if len(name.split()) > 1 and name.split()[-1] not in suffixes:      
        suffixes.append(name.split()[-1])