You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python提取Dimension列数值计算乘积:Model E输出异常求助

问题解决:从Dimension列提取有效数值计算乘积

问题原因

你的原代码会提取文本中所有数字,包括像Model E里的35(来自35%),导致乘积为250*2*35=17500,与期望的500不符。核心问题是需要过滤掉百分比类的数值,只保留和容量/尺寸相关的有效数值来计算乘积。

解决方案

方案1:简洁正则过滤(推荐)

使用带负向断言的正则表达式,直接排除百分比前的数值,再计算剩余数值的乘积:

import pandas as pd

# 假设df是你的数据集
df['output'] = df['Dimension'].str.findall(r'\d*\.?\d+(?!\s*%)') \
                               .apply(lambda nums: pd.Series(nums).astype(float).prod())

正则说明:

  • \d*\.?\d+:匹配整数或小数(如4.31、250、2)
  • (?!\s*%):负向预测断言,确保匹配的数值后面没有紧跟(含任意空格的)%,自动过滤百分比数值

方案2:自定义函数(更灵活)

如果后续需要添加更多过滤规则(比如排除特定后缀的数值),可以用自定义函数处理:

import pandas as pd
import re

def compute_output(dim_str):
    # 提取所有数值及后续的字符片段
    num_matches = re.findall(r'(\d*\.?\d+)([^\d]*)', dim_str)
    valid_nums = []
    for num_str, suffix in num_matches:
        if not num_str:
            continue
        # 跳过百分比数值
        if '%' in suffix:
            continue
        valid_nums.append(float(num_str))
    # 计算乘积,无有效数值时返回0
    return pd.Series(valid_nums).prod() if valid_nums else 0.0

df['output'] = df['Dimension'].apply(compute_output)

验证结果

运行后,各Model的output列将完全匹配你的期望:

ModelDimensionoutput
A4.31 m x 2 m x 3.222 m27.77364
B220m220
C'St 473m473
DrangeZng 2x250m500
E原装250ml 2s 35%500
FQstd 550ml 1+1550
G优质面霜250ml 2s 35%500
H优质面霜250ml 2s 45%500

内容的提问来源于stack exchange,提问作者Chayan Banerjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 19:30:02