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

Pandas:从分隔符不统一的不规则字符串提取关键字对应数值并转列

实现思路

这种分隔符不固定的非结构化文本提取,直接用正则匹配键值对比逐段拆分效率更高,也能自动过滤单位、分隔符这类无关内容,具体实现步骤如下:

第一步:导入依赖库

import pandas as pd
import re

第二步:构造测试数据(已有真实数据可跳过)

df = pd.DataFrame({
    'Area': ['foo', 'bar', 'baz', 'qux'],
    'Dimensions': [
        'Length: 2m; Width: 3m; Height: 4m; Slope- 3',
        'Width: 6m; Length: 4m; Height: 3m; Slope: 6',
        'Height: 4m; Slope: 4; Volume = 24m3',
        'Vol: 42m3'
    ]
})

第三步:定义维度提取逻辑

# 统一同义维度名,避免出现Vol和Volume分为两列的问题
key_map = {
    "Vol": "Volume"
}

def parse_dim_str(dim_str):
    dim_dict = {}
    # 正则直接匹配键名和纯数值,自动跳过分隔符、单位、空白字符
    for key, val in re.findall(r'([a-zA-Z]+)\s*[:=\-]\s*(\d+)', dim_str):
        std_key = key_map.get(key, key)
        dim_dict[std_key] = int(val)
    return pd.Series(dim_dict)

第四步:生成最终结果

# 提取所有维度列,和原Area列合并,缺失值填充为NULL
res_df = pd.concat(
    [df["Area"], df["Dimensions"].apply(parse_dim_str)],
    axis=1
).fillna("NULL")

# 按需调整列顺序
res_df = res_df[["Area", "Length", "Width", "Height", "Slope", "Volume"]]

运行后res_df就是符合要求的输出格式,如果需要填充0代替NULL,把fillna("NULL")改成fillna(0)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:45:01