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
相关产品推荐
相关产品推荐

