从字符串中提取带空格的整数

Posted

技术标签:

【中文标题】从字符串中提取带空格的整数【英文标题】:Extract integers with white space from a string 【发布时间】:2019-08-03 00:36:51 【问题描述】:

我是正则表达式的新手,所以我的代码很吃力。

我有一个数据框,df,结构如下:

                                    NAME  PERCENT
0     APPLE COMPANY A  57 638 232 stocks  0.12322
1  BANANA 1 COMPANY B  12 946 201 stocks  0.02768
2     ORANGE COMPANY C  8 354 229 stocks  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]
    )

我想从NAME 中提取整数,但不是所有整数(请注意,在第 1 行中,我们有BANANA 1 COMPANY B,我想在COMPANY 之前忽略整数1。我只想提取那些stocks 之前的整数。

我希望输出如下所示:

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

到目前为止,我只有这个,它不能产生我想要的:

df['NAME'].str.findall(r'\b\d+\b')

编辑:请注意,股票的数量可能会从数千变为数百万,这意味着没有模式。

【问题讨论】:

【参考方案1】:

这个regex 会提取你要找的东西

\d+\s\d+\s\d+

匹配:

57 638 232

12 946 201

8 354 229

发件人:

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

【讨论】:

完全如此:df['Stocks']=df['NAME'].str.findall(r'\b\d+\b').apply(lambda x: ''.join(x))df.NAME=df.NAME.replace('\d1,\s\d+\s\d+','',regex=True).str.strip('stocks ') 应该这样做。不错,+1 @anky_91 是否可以提取所有整数?我也有像5008 00010 000 这样的整数,而不仅仅是百万区间。 (\d+\s\d+\s\d+)|(\d+\s\d3)|(\d2,) 这将匹配 500、8 000 和 10 000

以上是关于从字符串中提取带空格的整数的主要内容,如果未能解决你的问题,请参考以下文章

Java问题:从字符串中提取用空格隔开的数字

正则表达式查找带空格的整数中的无效字符

三个整数到 1 个带空格的字符串;

试图将一个名为范围的字符串(带空格的文本)的 excel 命名为字符串数组

C语言用如何用scanf输入带有空格的字符串

从单个字符串中提取字符串,然后删除空格