如何在数据框中使用大写首字母缩写词

2024-06-16 10:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框df,其中包含我需要整齐格式化的公司名称。名称已在标题栏中:

      Company Name     
0         Visa Inc    
1         Msci Inc
2    Coca Cola Inc
3         Pnc Bank
4         Aig Corp
5    Td Ameritrade 
6         Uber Inc
7       Costco Inc
8   New York Times

由于许多公司使用首字母缩略词或缩写(行1345),我只希望这些公司名称中的第一个字符串为大写,如下所示:

      Company Name     
0         Visa Inc    
1         MSCI Inc
2    Coca Cola Inc
3         PNC Bank
4         AIG Corp
5    TD Ameritrade 
6         Uber Inc
7       Costco Inc
8   New York Times

我知道我无法获得100%的准确替换,但我相信,只有在以下情况下,我才能通过上套管接近第一根管柱:

  • 只有4个或更少的字符
  • 第一个字符串不是字典中的单词

我如何通过类似:df['Company Name'] = df['Company Name'].replace()的方法实现这一点


Tags: name名称dfnewvisa公司companyinc
3条回答

因此,您可以实际使用enchant模块来确定它是否是字典中的单词。考虑到你仍然会有一些不良结果,例如优步

这是我写的代码,很抱歉变量的名字太糟糕了

import enchant
import pandas as pd


def main():
    d = enchant.Dict("en_US")
    listofcompanys = ['Msci Inc',
                      'Coca Cola Inc',
                      'Pnc Bank',
                      'Aig Corp',
                      'Td Ameritrade',
                      'Uber Inc',
                      'Costco Inc',
                      'New York Times']

    dataframe = pd.DataFrame(listofcompanys, columns=['Company Name'])
    for index, name in dataframe.iterrows():
        first_word = name['Company Name'].split()
        is_word = d.check(first_word[0])
        if not is_word:
            name['Company Name'] = first_word[0].upper() + ' ' + first_word[1]

    print(dataframe)



if __name__ == '__main__':
    main()

这方面的产出是:

         Company Name
0        MSCI Inc
1   Coca Cola Inc
2        PNC Bank
3        AIG Corp
4   TD Ameritrade
5        UBER Inc
6      Costco Inc
7  New York Times

你可以先把第一个单词和其他部分分开。然后根据您的逻辑过滤第一个单词:

company_list = ['Visa']

s = df['Company Name'].str.extract('^(\S+)(.*)')

mask = s[0].str.len().le(4) & (~s[0].isin(company_list))
df['Company Name'] = s[0].mask(mask, s[0].str.upper()) + s[1]

输出(请注意,New York中的NEW也会发生更改):

     Company Name
0        Visa Inc
1        MSCI Inc
2   COCA Cola Inc
3        PNC Bank
4        AIG Corp
5   TD Ameritrade
6        UBER Inc
7      Costco Inc
8  NEW York Times

这里有一个有效的解决方案,它使用英语单词列表。只是它对{}和{}不准确,但就像你说的,这很难达到100%的准确度

url = 'https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt'

words = set(pd.read_csv(url, header=None)[0])

w1 = df['Company Name'].str.split()
m1 = ~w1.str[0].str.lower().isin(words) # is not an english word
m2 = w1.str[0].str.len().le(4) # first word is < 4 characters

df.loc[m1 & m2, 'Company Name'] = w1.str[0].str.upper() + ' ' + w1.str[1:].str.join(' ')

     Company Name
0        Visa Inc
1        MSCI Inc
2   Coca Cola Inc
3        PNC Bank
4        AIG Corp
5   Td Ameritrade
6        UBER Inc
7      Costco Inc
8  New York Times

注意:我也用nltk软件包尝试了这一点,但显然,nltk.corpus.words模块到目前为止还没有完整的英文单词

相关问题 更多 >