【问题标题】: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')

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

【问题讨论】:

    标签: python regex pandas extract


    【解决方案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('\d{1,}\s\d+\s\d+','',regex=True).str.strip('stocks ') 应该这样做。不错,+1
    • @anky_91 是否可以提取所有整数?我也有像5008 00010 000 这样的整数,而不仅仅是百万区间。
    • (\d+\s\d+\s\d+)|(\d+\s\d{3})|(\d{2,}) 这将匹配 500、8 000 和 10 000
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    相关资源
    最近更新 更多