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

如何按指定规则拆分DataFrame的name列并赋值对应列名?

解决Pandas中拆分字符串列并提取指定部分的问题

你之前的代码之所以达不到预期效果,核心问题在于不同行的name字段拆分后得到的元素数量不一样——有的是3段,有的是4段甚至5段,你固定取索引为2的元素作为leaf,自然拿不到每一行的最后一段内容。

这里给你两种简单可行的解决方法:

方法一:拆分后通过列表索引提取

先把name列拆分成列表格式,再分别提取第一个、第二个和最后一个元素,步骤清晰易懂:

# 把name列按/拆分成列表
df['split_list'] = df['name'].str.split('/')
# 提取列表第一个元素作为main列
df['main'] = df['split_list'].str[0]
# 提取列表第二个元素作为sub列
df['sub'] = df['split_list'].str[1]
# 提取列表最后一个元素作为leaf列(用-1索引适配任意长度的列表)
df['leaf'] = df['split_list'].str[-1]
# 删掉临时生成的split_list列(可选)
df = df.drop('split_list', axis=1)

方法二:用正则表达式一次性提取(更简洁)

利用正则表达式的分组匹配功能,直接从name字符串中捕获我们需要的三个部分,一行代码就能搞定:

# 使用正则提取main、sub、leaf三个字段
df[['main', 'sub', 'leaf']] = df['name'].str.extract(r'^([^/]+)/([^/]+).*/([^/]+)$')

这个正则的逻辑很直观:

  • ^([^/]+):匹配开头到第一个/的内容(也就是第一段)
  • /([^/]+):匹配第一个/之后到第二个/的内容(第二段)
  • .*:匹配中间所有的内容(不管中间有多少段,都直接跳过)
  • /([^/]+)$:匹配最后一个/之后到结尾的内容(最后一段)

两种方法都能得到你想要的结果:

idnamemainsubleaf
1a/b/cabc
2w/x/y/zwxz
3q/w/e/r/tqwt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:55:51