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

如何将字母数字字符串列拆分为首部数字列与剩余内容列?

拆分字母数字字符串为开头数字组与剩余内容

需求:将DataFrame的Col A列拆分为两列A1和A2:

  • A1提取字符串开头的所有连续数字部分(包含带空格的数字组,如“2 200”)
  • A2保留剩余内容,若无剩余则为null

示例输入

Col A
2 Nutsx20mm
2 200 jibs50
3 200
5
8 Certs 20

期望输出

A1A2
2Nutsx20mm
2 200jibs50
3 200null
5null
8Certs 20

尝试过的错误代码

df_tab["Col A"].str.extract(r'(\d+)(?: (\S.+))?$')

当前错误输出

A1A2
2Nutsx20mm
2200 jibs50
3200
5
8Certs 20

正确实现方法

使用修正后的正则表达式,匹配开头所有由空格分隔的数字组,然后捕获剩余内容:

import pandas as pd

df_tab[["A1", "A2"]] = df_tab["Col A"].str.extract(r'^((?:\d+\s*)+)(.*)$')

正则表达式解释

  • ^:锚定字符串开头,确保只匹配开头的数字组
  • ((?:\d+\s*)+):捕获A1的内容
    • (?:\d+\s*):非捕获组,匹配一段数字(\d+)加上可选的空格(\s*)
    • +:重复该非捕获组,匹配所有连续的“数字+空格”组合(比如“2 200”)
  • (.*):捕获A2的剩余内容,无剩余时为空字符串

处理空值转为null

若需要把A2的空字符串转为pandas的NA(对应需求中的null),添加以下代码:

df_tab["A2"] = df_tab["A2"].str.strip().replace('', pd.NA)

最终结果

运行后得到与期望一致的输出:

A1A2
2Nutsx20mm
2 200jibs50
3 200
5
8Certs 20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:20:42