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

Pandas Merge/Join问题:正则提取结果关联原DataFrame生成多行

解决方案

你需要把原DataFrame中第一条记录根据正则提取的3个结果拆分成3条,同时保留第二条记录,最终生成包含4条记录的新DataFrame。可以通过以下步骤实现:

  • 用str.extractall提取所有引号内的内容,该方法会返回带多级索引的结果(第一级是原DataFrame的索引,第二级是匹配项的序号)
  • 将提取结果与原DataFrame按索引合并,保留原数据的所有列
  • 重置索引并整理列名,得到最终的结构

修改后的代码如下:

import pandas as pd

# 原数据
data = [['Sql "syn-eu2-prd-edw-001 database windows net", "syndpeu2prdedw1",  Query="SELECT ta FROM rdv_60_137.Account"', "x1"], ["b1", "x2"]]
df = pd.DataFrame(data, columns=["Expression","Key"])

# 提取所有引号内的内容,生成多级索引的结果
extracted = df['Expression'].str.extractall(r'"(.*?)"')
# 重命名提取的列,方便识别
extracted.columns = ['Extracted_Content']

# 合并原数据和提取结果,按原索引关联
result = pd.merge(df, extracted, left_index=True, right_index=True, how='left')

# 重置索引,清理多余的索引层级
result = result.reset_index(drop=True)

print(result)

运行后输出的结果会是:

Expression Key                     Extracted_Content
0  Sql "syn-eu2-prd-edw-001 database windows net", "syndpeu2prdedw1", ...  x1  syn-eu2-prd-edw-001 database windows net
1  Sql "syn-eu2-prd-edw-001 database windows net", "syndpeu2prdedw1", ...  x1                      syndpeu2prdedw1
2  Sql "syn-eu2-prd-edw-001 database windows net", "syndpeu2prdedw1", ...  x1       SELECT ta FROM rdv_60_137.Account
3                                                                    b1  x2                                NaN

如果不需要第二条记录的NaN值(因为它没有匹配到引号内容),可以把合并的how='left'改成how='inner',这样只会保留有提取内容的记录,但根据你的需求是包含原数据集所有记录,所以用left更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:45:28