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

基于多规则拆分含数值与单位的Code列的技术求助

拆分带单位的数值列方案

直接用pandas的str.extract配合正则表达式就能搞定,比apply+lambda高效得多,还能覆盖你所有的场景——包括只有单位的情况。

正则表达式说明

我们需要匹配两种核心场景:

  • 既有数值又有单位(比如1KG、7.5LB、.5OZ)
  • 只有单位(比如OZ)

对应的正则可以这么写:

^(\d*\.?\d+)?([A-Za-z]+)$

各部分含义:

  • ^:匹配字符串开头,避免匹配中间的无关内容
  • (\d*\.?\d+)?:匹配数值部分,支持多种格式:
    • 整数(1、50)
    • 带小数点的小数(7.5、11.023)
    • 开头仅带小数点的小数(.5)
    • 最后的?表示数值部分可以不存在(对应只有单位的情况)
  • ([A-Za-z]+):匹配单位部分,支持大小写字母组合(覆盖KG、G、LB、OZ、GM这些)
  • $:匹配字符串结尾,确保单位是最后一部分

完整代码实现

import pandas as pd
import re

# 示例数据
data = {
    'Code': ['1KG', 'OZ', '50LB', '56G', '7.5LB', '.5OZ', '4GM', '11.023LB']
}
df = pd.DataFrame(data)

# 提取数值和单位,忽略大小写匹配
df[['Code Value', 'Code UOM']] = df['Code'].str.extract(r'^(\d*\.?\d+)?([A-Za-z]+)$', flags=re.IGNORECASE)

# 处理只有单位的情况,填充默认数值1
df['Code Value'] = df['Code Value'].fillna('1')

# 统一单位为大写(可选,根据需求调整)
df['Code UOM'] = df['Code UOM'].str.upper()

# 可选:把Code Value转为数值类型,方便后续计算
df['Code Value'] = pd.to_numeric(df['Code Value'])

# 输出拆分结果
print(df[['Code Value', 'Code UOM']])

运行结果

Code ValueCode UOM
01.0KG
11.0OZ
250.0LB
356.0G
47.5LB
50.5OZ
64.0GM
711.023LB

你原来代码的问题

  1. 语法错误:字符串没有search方法,应该用re.search调用正则
  2. 正则逻辑错误:没匹配数值部分,\Boz|kg|lb|g|gm\w+的写法无法定位单位的正确位置,也没考虑大小写
  3. 未处理无数值的场景:没法生成默认的数值1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:17:44