在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
相关产品推荐
相关产品推荐

