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

如何从DataFrame测量值中分离含字符、符号和数字的复杂计量单位?

分离DataFrame中复杂测量值与计量单位的方案

问题场景

现有如下格式的DataFrame,其中value列包含数值与复杂计量单位的组合(比如带面积符号、分数形式、科学计数相关的单位),需要将数值与单位分离到对应的value和unit列:

measurementsvalueunit
mea112.8875cm2
mea233.1 mL/min/1.73m2
mea32.53mg / dL
mea40.005ml/ min / m2
mea50.8ml/m2
mea60.73x10^3/UL

期望输出

处理后得到如下结果,数值部分提取到value列,单位部分清理多余空格后存入unit列:

measurementsvalueunit
mea112.8875cm2
mea233.1mL/min/1.73m2
mea32.53mg/dL
mea40.005ml/min/m2
mea50.8ml/m2
mea60.73x10^3/UL

实现方案

利用Python的pandas结合正则表达式可以快速实现需求,核心逻辑是提取字符串开头的数值部分,再清理单位中的多余空格:

import pandas as pd

# 构造示例DataFrame(实际使用时替换为你的数据源)
data = {
    'measurements': ['mea1', 'mea2', 'mea3', 'mea4', 'mea5', 'mea6'],
    'value': ['12.8875cm2', '33.1 mL/min/1.73m2', '2.53mg / dL', '0.005ml/ min / m2', '0.8ml/m2', '0.73x10^3/UL'],
    'unit': ['', '', '', '', '', '']
}
df = pd.DataFrame(data)

# 提取开头的数值(整数/小数)和剩余的单位部分
df[['extracted_value', 'raw_unit']] = df['value'].str.extract(r'^(\d+\.?\d*)\s*(.*)$')

# 清理单位中的所有多余空格
df['unit'] = df['raw_unit'].str.replace(r'\s+', '', regex=True)

# 更新value列为提取的数值,删除临时辅助列
df['value'] = df['extracted_value']
df = df.drop(['extracted_value', 'raw_unit'], axis=1)

# 查看结果
print(df)

正则说明

正则表达式 ^(\d+\.?\d*)\s*(.*)$ 的作用:

  • ^(\d+\.?\d*):匹配字符串开头的数值部分,支持整数(如33)和小数(如12.8875、0.005)
  • \s*:匹配数值与单位之间的任意数量空格
  • (.*)$:匹配剩余的所有内容作为原始单位

内容的提问来源于stack exchange,提问作者Luckyboy. Jupiterchen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:05:27