gpt4 book ai didi

python-3.x - 从产品描述中提取数字数据

转载 作者:行者123 更新时间:2023-12-04 08:02:21 26 4
gpt4 key购买 nike

我正在使用 python3。
我试图从产品描述中提取数字数据。然而,有时相同的产品具有不同的措辞描述,这会导致结果相互矛盾。
我的代码是:

import pandas as pd
import re
data = {'desc':['1 oz Silver Eagles Monster Box (500 pc)', 'Silver Eagle Monster Box (500 pcs 1 oz coins)', '2021 10 oz Silver Royal Canadian Mint Bar'], 'inventory':['in stock', 'in stock', 'out of stock']}
df=pd.DataFrame(data)
df['ounces']=df['desc'].str.extract(r'(\d+ pc|\d+ oz)')
print(df)
我得到的是:
                                            desc     inventory  ounces
0 1 oz Silver Eagles Monster Box (500 pc) in stock 1 oz
1 Silver Eagle Monster Box (500 pcs 1 oz coins) in stock 500 pc
2 2021 10 oz Silver Royal Canadian Mint Bar out of stock 10 oz
显然前两项是相同的。我希望正则表达式首先在整个描述中查找 'pc',然后如果没有找到则查找 'oz' 但这不是它的作用。我需要得到的是:
                                            desc     inventory  ounces
0 1 oz Silver Eagles Monster Box (500 pc) in stock 500 pc
1 Silver Eagle Monster Box (500 pcs 1 oz coins) in stock 500 pc
2 2021 10 oz Silver Royal Canadian Mint Bar out of stock 10 oz
我的原始数据框没有盎司,我正在尝试添加该列并同时提取正确的数据。我应该以不同的方式处理这个问题吗?

最佳答案

您可以使用

>>> df['ounces'] = df['desc'].str.findall(r'(?:.*\D)?(\d+ pc)|(\d+ oz)').str[0].str.join('')
>>> df
desc inventory ounces
0 1 oz Silver Eagles Monster Box (500 pc) in stock 500 pc
1 Silver Eagle Monster Box (500 pcs 1 oz coins) in stock 500 pc
2 2021 10 oz Silver Royal Canadian Mint Bar out of stock 10 oz
(?:.*\D)?(\d+ pc)|(\d+ oz)模式将优先匹配 pc 的第一个捕获组,以及 oz部分只有在 pc 之后才会匹配一。
regex demo .
Series.str.findall返回所有模式匹配, .str[0]只需要获得第一个结果, .str.join('')将元组(因为模式中有两个组, findall 返回元组列表)为字符串(因为组值之一将始终为空)。

关于python-3.x - 从产品描述中提取数字数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66393413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com