Skip to main content
 首页 » 编程设计

python之使用正则表达式在双空格后提取整数

2025年05月04日23java哥

我有一个数据框,我想在其中提取双倍空间后的内容。对于 NAME 列中的所有行,在公司名称之后的整数之前有一个双空格。

                                    NAME  INVESTMENT  PERCENT 
0     APPLE COMPANY A  57 638 232 stocks     OIL LTD  0.12322 
1  BANANA 1 COMPANY B  12 946 201 stocks    GOLD LTD  0.02768 
2     ORANGE COMPANY C  8 354 229 stocks     GAS LTD  0.01786 
 
df = pd.DataFrame({ 
    'NAME': ['APPLE COMPANY A  57 638 232 stocks', 'BANANA 1 COMPANY B  12 946 201 stocks', 'ORANGE COMPANY C  8 354 229 stocks'], 
    'PERCENT': [0.12322, 0.02768 , 0.01786] 
    }) 

我之前有这个,但它在公司名称中也包含整数:

df['STOCKS']=df['NAME'].str.findall(r'\b\d+\b').apply(lambda x: ''.join(x)) 

相反,我尝试在双空格后提取

df['NAME'].str.split('(\s{2})') 

给出输出:

0       [APPLE COMPANY A,   , 57 638 232 stocks] 
1    [BANANA 1 COMPANY B,   , 12 946 201 stocks] 
2       [ORANGE COMPANY C,   , 8 354 229 stocks] 

但是,我希望将双空格后出现的整数连接/合并并放入新列中。

                 NAME  PERCENT  STOCKS 
0     APPLE COMPANY A  0.12322  57638232 
1  BANANA 1 COMPANY B  0.02768  12946201 
2    ORANGE COMPANY C  0.01786  12946201 

如何修改我的第二个函数来执行我想要的操作?

请您参考如下方法:

遵循您可能使用的原始逻辑

df['STOCKS'] = df['NAME'].str.extract(r'\s{2,}(\d+(?:\s\d+)*)', expand=False).str.replace(r'\s+', '') 
df['NAME'] = df['NAME'].str.replace(r'\s{2,}\d+(?:\s\d+)*\s+stocks', '') 

输出:

                 NAME  PERCENT    STOCKS 
0     APPLE COMPANY A  0.12322  57638232 
1  BANANA 1 COMPANY B  0.02768  12946201 
2    ORANGE COMPANY C  0.01786   8354229 

详情

  • \s{2,}(\d+(?:\s\d+)*) 用于在 2 个或更多空格和 .replace(r'\s+', '') 之后删除提取文本中的所有空格
  • .replace(r'\s{2,}\d+(?:\s\d+)*\s+stocks' 更新 NAME 中的文本列,它删除 2 个或多个空格,连续的空格分隔的数字 block ,然后是 1+ 个空格和 stocks。实际上,最后的 \s+stocks 可以替换为 .* 如果还有其他的话。