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

如何从Pandas DataFrame的字符串列中提取name字段值?已尝试代码未正常工作

解决Pandas提取键值对中name值的问题

嗨,我来帮你搞定这个提取name值的问题~你原来的代码没起作用,核心原因是正则表达式的格式和你的数据不匹配:你写的"'name': '(.*?)'"是针对类似字典的'name': 'x'格式,但你的数据是id=1;name=x;color=blue;这种用分号分隔、键值对用等号连接的结构,自然匹配不到啦😅

下面给你两种实用的解决方案:

方法一:直接用正确的正则提取

针对你的数据格式,我们可以写一个精准匹配name=后面内容的正则,直到遇到分号或者行尾为止:

import pandas as pd

# 示例数据
df = pd.DataFrame({'col': ['id=1;name=x;color=blue;', 'id=2;name=y;color=green;']})

# 提取name对应的值
df['name'] = df['col'].str.extract(r'name=([^;]+)')

这里的正则r'name=([^;]+)'解释:

  • name=:精准匹配键的固定前缀
  • ([^;]+):捕获所有不是分号的字符(也就是name对应的值),括号用来标记需要提取的部分

执行后,df的name列就会得到['x', 'y'],完全符合你的需求~

方法二:批量提取所有键值对(适合多字段需求)

如果你之后还需要提取id、color等其他字段,用这种方法更高效:把每行的键值对拆分成字典,再扩展成DataFrame的列:

# 拆分每行的键值对,过滤空元素(因为最后一个分号会产生空字符串)
key_value_pairs = df['col'].str.split(';', expand=True).stack()

# 拆分每个键值对为键和值
split_pairs = key_value_pairs.str.split('=', expand=True)

# 转成宽表格式,得到所有字段的列
result = split_pairs.set_index(0, append=True)[1].unstack(0)

# 合并回原DataFrame(可选)
df = df.join(result)

这样处理后,df会新增id、name、color三列,一次性搞定所有字段的提取,非常适合有多个键值对需要处理的场景。

小提醒

如果你的数据中存在没有name字段的行,提取后会得到NaN,可以用df['name'].fillna('未知', inplace=True)来填充默认值;如果name的值里可能包含分号(这种情况很少见),那需要调整正则逻辑,比如匹配到下一个键的开头或者行尾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:27:29