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

Pandas正则表达式求助:将字符串列拆分为多数值列

解决DataFrame字符串列拆分为多列的问题

核心思路

先通过正则提取每一行中所有的「属性名:数值」对,再将提取结果转换为宽表结构,和原DataFrame索引对齐后得到目标结果。

具体实现代码

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Dimensions': [
        '"Width:2 cm"',
        '"Diameter: 1.2 cm, Height: 10 cm"',
        '"Diameter: 3.4cm, Volume: 10cm"'
    ]
})

# 步骤1:去除字符串首尾的引号
df['cleaned'] = df['Dimensions'].str.strip('"')

# 步骤2:用正则提取所有属性名和对应数值
# 正则解释:
# (\w+):匹配属性名(如Width、Diameter),\w+表示1个以上字母/数字/下划线
# :\s*:匹配冒号,后面跟0个或多个空格(兼容有空格和无空格的情况)
# (\d+\.?\d*):匹配数值,支持整数(2、10)和小数(1.2、3.4)
extract_df = df['cleaned'].str.extractall(r'(\w+):\s*(\d+\.?\d*)')

# 步骤3:转换为宽表结构,属性名为列,数值为对应单元格值
extract_df.columns = ['attribute', 'value']
result_df = extract_df.reset_index().pivot(index='level_0', columns='attribute', values='value')

# 步骤4:将结果转换为数值类型,空值保留为NaN(对应题目中的null)
result_df = result_df.apply(pd.to_numeric)

print(result_df)

代码运行结果

attribute  Diameter  Height  Volume  Width
level_0                                   
0               NaN     NaN     NaN    2.0
1               1.2    10.0     NaN    NaN
2               3.4     NaN    10.0    NaN

关键细节说明

  • 正则表达式(\w+):\s*(\d+\.?\d*)专门兼容了冒号后有空格和无空格的两种格式
  • extractall会提取每一行中所有匹配的键值对,避免遗漏多属性的情况
  • pivot方法负责把长表转成宽表,自动对齐原DataFrame的行索引
  • 最后用pd.to_numeric把字符串数值转成数值类型,方便后续计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:15:41