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

如何用Pandas提取字符间子串,将单列键值文本拆分为多列?

解决Pandas中键值对文本列的拆分问题

方法1:正则表达式批量提取(推荐)

直接用str.extract配合捕获组,一次性提取所有目标列,无需依赖固定长度:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'Value_column': ['Car:"Ford",Colour:"Black", Price:2000, ']
})

# 正则匹配,捕获每个键对应的取值
df[['Car', 'Colour', 'Price']] = df['Value_column'].str.extract(
    r'Car:"(.*?)",Colour:"(.*?)", Price:(\d+),', expand=True
)

# 查看结果
print(df[['Car', 'Colour', 'Price']])

输出:

Car Colour Price
0  Ford  Black  2000

正则说明:(.*?)是非贪婪匹配,会精准捕获到下一个分隔符前的内容;(\d+)专门匹配数字类型的Price值,避免多余字符。

方法2:转字典后展开

如果文本格式接近字典结构,可以先清洗字符串再转成字典,再拆分列:

import pandas as pd
import ast

# 清洗字符串:去掉末尾多余的逗号,把Price的数字转为字符串格式(符合字典语法)
df['cleaned'] = df['Value_column'].str.rstrip(', ').replace(r'Price:(\d+)', r'Price:"\1"', regex=True)

# 转成字典
df['dict_col'] = df['cleaned'].apply(ast.literal_eval)

# 展开字典为列
df = pd.concat([df, df['dict_col'].apply(pd.Series)], axis=1)

# 提取目标列
print(df[['Car', 'Colour', 'Price']])

这种方法扩展性更强,如果后续新增键值对,无需修改正则,只要格式符合字典规则即可。

原有方法的局限性

你之前通过固定截取长度的方式只适用于已知取值长度的场景,一旦文本内容变化(比如Car是"Toyota",长度6),代码就会失效。上面两种方法都是基于内容匹配而非固定位置,能适配不同长度的取值。

内容的提问来源于stack exchange,提问作者fred.schwartz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:12:43