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

如何仅按开头数字拆分Pandas列且保留后续所有字符?

解决Pandas拆分列时丢失后续数字的问题

我来帮你搞定这个正则表达式的问题!你遇到的核心问题是原正则只匹配了字母部分,没把字母后面的数字包含进去,导致这部分内容丢失了。

问题根源

你原来用的正则(\d+)([A-Za-z]*)中,第二组[A-Za-z]*只能匹配任意数量的字母,一旦遇到字母后的数字,正则就会停止匹配这部分,所以像SW1里的1就被漏掉了。

修正方案

我们只需要把第二组的正则改成匹配数字之后的所有内容(不管是字母还是数字),就可以保留完整的后续部分。推荐使用这个正则:^(\d+)(.*)

  • ^(\d+):匹配字符串开头的连续数字,作为第一组(对应你要保留的开头数字)
  • (.*):匹配开头数字之后的所有剩余内容,包括字母、数字等任意字符,作为第二组

修改后的代码

import pandas as pd
import numpy as np

data = np.array([['Col1','Col2'], ['1','05MW'], ['2','16MW'], ['3','05SW1'], ['4','05SW2']])
df = pd.DataFrame(data=data[1:,:], index=data[1:,0], columns=data[0,:])

# 替换正则表达式,这里把拆分后的数字列命名为Col2_num更清晰,你也可以根据需求调整
df[['Col2_num', 'id']] = df['Col2'].str.extract('^(\d+)(.*)', expand=True)

print(df)

执行结果

Col1 Col2 Col2_num    id
1    1  05MW       05    MW
2    2  16MW       16    MW
3    3 05SW1       05   SW1
4    4 05SW2       05   SW2

如果你希望更严谨一点(确保第二部分必须以字母开头,避免开头数字后直接跟数字的情况),可以用这个正则:^(\d+)([A-Za-z].*),它会要求第二组以字母开头,然后再匹配后续的所有内容,同样能满足你的示例需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:46:31