如何使用两个正则捕获组在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
相关产品推荐
相关产品推荐

