在Pandas中提取正则匹配结果并将索引转为普通列
问题场景
初始DataFrame结构如下:
column0 column2 0 0 SomethingSomeData1MixedWithSomeData2 1 something SomeMoreDataWithSomeData3 2 whatever SomeData4
使用df['column2'].str.extractall(r'(SomeData\d)')提取正则匹配内容后,得到多层索引结果:
data match 0 0 SomeData1 0 1 SomeData2 1 0 SomeData3 2 0 SomeData4
需要将其转换为以下两种目标格式之一:
形式一:宽表格式
data0 data1 0 SomeData1 SomeData2 1 SomeData3 NaN 2 SomeData4 NaN
形式二:列表格式
data 0 [SomeData1, SomeData2] 1 [SomeData3] 2 [SomeData4]
解决方案
实现形式一(宽表)
通过unstack将match层级转为列,再整理列名:
# 先执行提取操作 extracted_df = df['column2'].str.extractall(r'(SomeData\d)') # 将match层级转为列 form1 = extracted_df.unstack(level='match') # 清理列名并重置索引 form1.columns = [f'data{i}' for i in form1.columns.get_level_values(1)] form1 = form1.reset_index(drop=True)
实现形式二(列表)
提供两种高效实现方式:
- 基于提取结果分组聚合:
form2 = extracted_df.groupby(level=0)['data'].apply(list).reset_index(name='data')
- 直接用
str.findall一步生成(无需先调用extractall):
df['data'] = df['column2'].str.findall(r'(SomeData\d)') # 若仅需结果列,可单独提取 form2 = df[['data']].copy()
内容的提问来源于stack exchange,提问作者Jose Vega
相关产品推荐
相关产品推荐

