从字符串中提取带空格的整数
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 是否可以提取所有整数?我也有像500
、8 000
和10 000
这样的整数,而不仅仅是百万区间。
(\d+\s\d+\s\d+)|(\d+\s\d3)|(\d2,)
这将匹配 500、8 000 和 10 000以上是关于从字符串中提取带空格的整数的主要内容,如果未能解决你的问题,请参考以下文章