【问题标题】:Python - Extracting weight from a column (containing a string) in a Pandas DataFrame using regex and adding it to a new columnPython - 使用正则表达式从 Pandas DataFrame 中的列(包含字符串)中提取权重并将其添加到新列中
【发布时间】:2020-05-10 07:36:31
【问题描述】:

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

产品ID产品描述

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

我想做的是:

  • 将 XL 电子表格导入 Pandas 数据框

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

  • 解析每个“ProductDescription”(大约 5000 行产品) 并且,使用正则表达式,找到提到权重的文本(它可以 被标识为“XXXXg”或“XXXXkg”)并将其放在“重量”中 数据框的列作为数值(浮点数)。

  • 最后将这个新的三列数据框导出为 excel 文件。

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

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)

希望你能帮上忙。请原谅我粗鲁地粘在一起的代码!我对此还是很陌生。

【问题讨论】:

  • import re as re?只需使用import re
  • 使用df['Weight'] = df['ProductDescription'].str.extract(r'(?i)(\d+(?:\.\d+)?)\s*[kmd]?g\b', expand=False).astype(float)
  • 啊,太好了。我希望我已经正确地“接受”了它。再次感谢你。模式解释也很有帮助!我绝对需要阅读正则表达式。也谢谢你的欢迎!你们都很善良。
  • 请分享一些输入/输出示例。
  • 它不断地抛出错误也总是分享整个错误信息。

标签: python regex excel pandas dataframe


【解决方案1】:

你可以使用

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 - 字边界。

【讨论】:

    猜你喜欢
    • 2021-04-19
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2021-01-29
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多