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

Pandas str.split用||分隔符拆分字符串为多列异常原因及解决方法

异常原因

pandas.Series.str.split 默认以正则规则匹配分隔符,两种错误写法的问题本质都是没有正确匹配字面量||:

  • 传入'||'作为分隔符时:正则语法中|是代表「或」逻辑的元字符,两个连续的|等价于匹配「空字符串或空字符串」,也就是字符串中所有字符间隙位置。指定拆分1次时,第一个拆分点在字符串最开头,因此切出的第一个元素为空字符串,第二个元素为完整原字符串,对应你看到的df3的异常结果。
  • 传入'[||]'作为分隔符时:正则语法中方括号代表字符集合,匹配集合内的任意单个字符,括号内重复写|不会改变匹配规则,最终只会匹配单个|字符。指定拆分1次时,会在第一个|的位置切分,切分后的后半段字符串开头还残留一个|,就出现了age列前多余竖线的问题。
正确调整方案

两种写法都可以得到和空格拆分一致的正确结果:

  1. 对正则元字符做转义,匹配字面量双竖线。正则中匹配特殊字符本身需要加反斜杠转义,双竖线对应的正则匹配规则为\|\|:
import pandas as pd
data2 = {'Name': ['Alice||23', 'Philip||12', 'Krish||64', 'John||29']}
df2 = pd.DataFrame(data2)
# 转义特殊字符,按双竖线拆分
df2[['Name', 'age']] = df2['Name'].str.split(r'\|\|', 1, expand=True)
  1. 关闭正则匹配模式,传入regex=False参数,此时分隔符会按普通字符串字面量匹配,不需要手动转义特殊字符,写法更简洁不易出错:
df2[['Name', 'age']] = df2['Name'].str.split('||', 1, expand=True, regex=False)

运行后输出结果完全符合预期:

Nameage
0Alice23
1Philip12
2Krish64
3John29

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:36:34