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

在Pandas中按正则表达式拆分列并仅保留匹配结果

问题:提取正则匹配项并生成单独列

给定原始DataFrame:

Letter      Actions
r1          a95,a20
r2          a30,a12-rf,a15,a75
r3          0
r4          a15,a74
r5          a11

期望输出(仅保留a+两位数字格式的匹配项,每个匹配项单独成列):

Letter      Action1      Action2      Action3      Action4
r1          a95          a20          
r2          a30          a12          a15          a75
r3          
r4          a15          a74
r5          a11

当前使用str.split(r'([a]\d{2})', expand=True)的写法会保留非匹配内容(比如-rf、逗号、0等),不符合需求。


解决方案

直接使用str.findall提取所有符合规则的匹配项,再将结果展开为多列:

import pandas as pd

df = pd.DataFrame(
    [['r1', 'a95,a20'],
     ['r2', 'a30,a12-rf,a15,a75'],
     ['r3', '0'],
     ['r4', 'a15,a74'],
     ['r5', 'a11']],
    columns=['Letter', 'Actions'])

# 提取每个单元格中所有符合a+两位数字的内容,返回列表形式
matched_list = df['Actions'].str.findall(r'a\d{2}')
# 将列表转换为DataFrame,指定列名与期望输出一致
action_df = pd.DataFrame(matched_list.tolist(), columns=['Action1', 'Action2', 'Action3', 'Action4'])
# 合并原表的Letter列与提取出的多列
final_df = pd.concat([df['Letter'], action_df], axis=1)

print(final_df)

代码说明

  • str.findall(r'a\d{2}'):精准提取所有匹配字母a+两位数字格式的内容,不会包含任何非匹配字符;
  • pd.DataFrame(matched_list.tolist()):将每个单元格的匹配列表转换为多行多列的结构;
  • pd.concat:将原始的Letter列与新生成的Action列合并,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:35:05