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列将完全匹配你的期望:
| Model | Dimension | output |
|---|---|---|
| A | 4.31 m x 2 m x 3.222 m | 27.77364 |
| B | 220m | 220 |
| C | 'St 473m | 473 |
| D | rangeZng 2x250m | 500 |
| E | 原装250ml 2s 35% | 500 |
| F | Qstd 550ml 1+1 | 550 |
| G | 优质面霜250ml 2s 35% | 500 |
| H | 优质面霜250ml 2s 45% | 500 |
内容的提问来源于stack exchange,提问作者Chayan Banerjee
相关产品推荐
相关产品推荐

