Python-使用正则表达式从Pandas DataFrame中的列(包含字符串)中提取权重并将其添加到新列中

新20

我有一个Excel电子表格,其中包含来自网站的产品数据,带有以下列标题:

产品编号产品描述

所述产品描述字段包含HTML详述一个网站产品的完整描述,并且每个描述内的重量被显示为字符串的一部分(例如,“重量是950克”或“重量是1.5公斤”)的数量和在之间没有空格重量单位。

我想做的是:

  • 将XL电子表格导入到Pandas Dataframe中

  • 创建一个名为“ Weight”的新列

  • 解析每个“ ProductDescription”(大约5000行产品),然后使用正则表达式查找提及重量的文本(可以将其标识为“ XXXXg”或“ XXXXkg”),然后将其放置在数据框作为数值(浮点数)。

  • 最后,将此新的三列数据框导出为ex​​cel文件。

我在下面整理了一个小脚本,但是它不断抛出错误。如果有人可以提供帮助,我将不胜感激。

import pandas as pd
import re as re


def weight(inputString):

    result = [re.search('([0-9.]+[kgG]{1,2})', s) for s in inputString]

    return result

excel_file = 'Products.xlsx'
df = pd.read_excel(excel_file)

df['Weight'] = df['ProductDescription'].apply(weight)

希望您能提供帮助。请原谅我拙劣的代码!我对此还是很陌生的。

维克多·史翠比维

您可以使用

df["Weight"] = (
    df["ProductDescription"]
    .str.extract(r"(?i)(\d+(?:\.\d+)?)\s*[kmd]?g\b", expand=False)
    .astype(float)
)

(?i)(\d+(?:\.\d+)?)\s*[kmd]?g\b模式匹配:

  • (?i) -使模式不区分大小写
  • (\d+(?:\.\d+)?)-第1组:1位以上的数字,可以选择出现.和1位以上的数字
  • \s* -0+空格
  • [kmd]?-可选的kmd
  • g - 一种 g
  • \b -单词边界。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章