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

如何使用两个正则捕获组在Pandas中生成两列提取的数字?

提取DataFrame字符串列中的所有数字块到多列

这个问题我之前也碰到过!你之前用的str.extract只会提取第一个匹配的数字块,要拿到所有数字块并放到不同列里,得用str.extractall配合unstack来实现,具体操作如下:

步骤1:构造示例数据(和你的例子一致)

import pandas as pd

# 你的示例数据
data = {'column': ['abc123', 'def456', 'ghi789jkl012']}
df = pd.DataFrame(data, index=[1, 2, 3])

步骤2:提取所有数字块并转成多列

# 用extractall提取所有匹配的数字块,返回多层索引的DataFrame
# 正则表达式r'(\d+)'匹配整数,要是需要支持小数可以改成r'(\d*\.?\d+)'
extracted = df['column'].str.extractall(r'(\d+)')

# 将多层索引中的匹配序号(level=1)转成列,这样每个数字块对应一列
extracted = extracted.unstack(level=1)

# 给新列重命名为newColumn、newColumn2...
extracted.columns = [f'newColumn{i+1}' for i in range(extracted.shape[1])]

# 和原DataFrame合并,得到最终结果
result = df.join(extracted)

最终输出

执行完上面的代码后,result的内容就是你想要的格式:

column newColumn newColumn2
1          abc123       123        NaN
2          def456       456        NaN
3  ghi789jkl012       789        012

补充说明

  • 如果你的字符串里有小数(比如abc12.34def56.78),只需要把正则表达式改成r'(\d*\.?\d+)',就能正确提取带小数点的数字块。
  • extractall会捕获所有符合正则的匹配项,不管有多少个;unstack则把每个匹配项从行转成列,自动给没有多个数字块的行填充NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:23:15