使用正则表达式提取数字

2024-05-18 06:12:40 发布

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

我想用正则表达式提取数字

df['price'][0] 

'[<em class="letter" id="infoJiga">3,402,000</em>]'

我想提取3402000

我怎样才能在熊猫数据帧中得到这个?你知道吗


Tags: 数据iddf数字priceclassemletter
3条回答

所有值的格式都一样吗?如果是这样,您可以使用一个简单的正则表达式来提取数值,然后将它们转换为int。你知道吗

import pandas as pd
import re

test_data = ['[<em class="letter" id="infoJiga">3,402,000</em>]','[<em class="letter" id="infoJiga">3,401,000</em>]','[<em class="letter" id="infoJiga">3,400,000</em>]','[<em class="letter" id="infoJiga">2,000</em>]']
df = pd.DataFrame(test_data)
>>> df[0]
0    [<em class="letter" id="infoJiga">3,402,000</em>]
1    [<em class="letter" id="infoJiga">3,401,000</em>]
2    [<em class="letter" id="infoJiga">3,400,000</em>]
3        [<em class="letter" id="infoJiga">2,000</em>]
Name: 0, dtype: object

定义提取并返回整数的方法

def get_numeric(data):
    match = re.search('>(.+)<', data)
    if match:
        return int(match.group(1).replace(',',''))    
    return None

将其应用于数据帧

df[1] = df[0].apply(get_numeric)
>>> df[1]
0    3402000
1    3401000
2    3400000
3       2000
Name: 1, dtype: int64

如果值是字符串,请尝试下面的代码。你知道吗

#your code    
df['price'][0] returns  '[<em class="letter" id="infoJiga">3,402,000</em>]'

let us say this is x.

y = ''.join(c for c in x.split('>')[1]  if c.isdigit()).strip()
print (y)

output: 3402000

希望有用。你知道吗

假设与环境无关的最简单正则表达式可能是([\d,]*)。比to_numeric函数还难。你知道吗

相关问题 更多 >