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

在Pandas DataFrame中提取带单位数值并统一单位至米的方法

解决Pandas提取字符串数值并统一单位的问题

嘿,我来帮你搞定这个需求!要从字符串里提取数值、识别单位并统一成米(或者你想要的其他单位),用正则表达式配合Pandas的操作就能轻松实现。下面一步步来:

步骤1:构造示例数据

首先咱们先把你给的示例数据做成DataFrame:

import pandas as pd

data = {
    "details": ["Distance", "Longest straight", "Top speed", "Full throttle"],
    "numbers": ["350m", "860m", "305km", "61 per cent"]
}
df = pd.DataFrame(data)

步骤2:编写处理函数(最灵活的方式)

我推荐写一个自定义函数,用正则匹配数值和单位,然后根据单位做转换。这样不管后续有什么新单位(比如cm),都能轻松扩展:

import re

def process_number_string(s):
    # 正则匹配:捕获数字,以及可选的单位(m/km/per cent),兼容数字和单位间的空格
    match_result = re.match(r'(\d+)\s*(m|km|per cent)?', s.strip())
    if not match_result:
        return None  # 处理无法匹配的异常情况
    
    # 提取数值和单位
    raw_num = int(match_result.group(1))
    unit = match_result.group(2)
    
    # 根据单位转换数值
    if unit == 'km':
        return raw_num * 1000  # 千米转米
    elif unit == 'm' or unit == 'per cent':
        return raw_num  # 米直接保留,百分比提取数字
    else:
        return raw_num  # 其他未定义单位默认返回原数字

步骤3:应用函数到DataFrame

把函数用apply方法作用到numbers列上,直接替换原列或者生成新列都可以:

# 替换原numbers列
df['numbers'] = df['numbers'].apply(process_number_string)

最终输出结果

运行完上面的代码,你的DataFrame就变成了:

detailsnumbers
Distance350
Longest straight860
Top speed305000
Full throttle61

扩展说明

  • 如果你的数据里有小数(比如1.2km),只需要把正则里的(\d+)改成(\d+\.?\d*),然后把int换成float就行。
  • 如果想保留原列,生成新列的话,改成df['converted_numbers'] = df['numbers'].apply(process_number_string)即可。
  • 要是有更多单位需要支持(比如cm转米除以100),直接在函数里加对应的判断分支就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:40:30