在Pandas中总结前后括号内的文本

2024-09-28 20:48:55 发布

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

我有一个表-一些有括号(),一些没有括号

    Companies    
    Arbino (Arb) Corp Ltd
    Arbino (Arb) Corp Ltd; Bakroaho (Bak) Bank
    Zinga
    Zinga; Bakroaho (Bak) Bank
    Bubble Zip (Bzip) Corp
    Bubble Zip (Bzip) Corp; Bakroaho (Bak) Bank

我需要创建一个这样的列-即括号内的文本和括号后的文本

Companies                                   Companies_Compressed
Arbino (Arb) Corp                           Arb Corp Ltd
Arbino (Arb) Corp; Bakroaho (Bak) Bank      Arb Corp Ltd; Bak Bank
Zinga                                       Zinga
Zinga; Bakroaho (Bak) Bank                  Zinga; Bak Bank 
Bubble Zip (Bzip) Corp                      Bzip Corp 
Bubble Zip (Bzip) Corp; Bakroaho (Bak) Bank Bzip Corp; Bak Bank

我还需要创建一个单独的表来告诉每个人Arbino=Arb

Company_prefix    short_form  
Arbino            Arb
Bakroaho          Bak
Bubble Zip        Bzip 

解决办法是什么


Tags: 文本zipcompressed括号bankcompaniesarbbubble
2条回答

请使用str.replace将特殊字符({}特殊字符()之前的任何alphanumerics替换为''

df['Companies_Compressed']=df['Companies'].str.replace('((\w+\s){1,2}(?=[(])|[()])','')

关于第二个问题

df1=df.assign(Company_prefix=df['Companies'].str.extract('(\w+\s\w+|\w+)(?=\s[(])'),short_form =df['Companies'].str.extract('(?<=[(])(.*?)(?=[)])')).dropna()
print(df1) 
               

让我们试试这个正则表达式:

pattern = '\((\w+)\) (\w+)'
df['Companies_Compressed'] = (df.Companies.str.extractall(pattern)
                                .agg(' '.join, axis=1)
                                .groupby(level=0).apply('; '.join)
                                .fillna(df['Companies'])
                             )

                                Companies Companies_Compressed
0                       Arbino (Arb) Corp             Arb Corp
1  Arbino (Arb) Corp; Bakroaho (Bak) Bank   Arb Corp; Bak Bank
2                                   Zinga                  NaN

相关问题 更多 >