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

Pandas技术问题:如何用另一列作为str.extractall的匹配模式输入?

在Pandas中使用列值作为str.extract的匹配模式

要实现用Pattern列的每行内容作为正则匹配规则,对Files列执行字符串提取,可以通过以下方法实现(str.extract本身不支持直接传入逐行变化的模式,需要逐行处理):

方法一:使用apply逐行处理

这种方法直观易懂,适合小数据集:

import pandas as pd

# 初始化数据
df = pd.DataFrame({"Pattern": ['a|d'],
                   "Files": ['a.csv, b.csv, c.csv, d.csv']})

# 拆分并展开Files列,同时清理空格
df['Files'] = df['Files'].str.split(',').apply(lambda x: [s.strip() for s in x])
df = df.explode(['Files'])

# 逐行应用Pattern列的正则规则提取内容
df['Expected'] = df.apply(
    lambda row: row['Files'].str.extract(r'({})'.format(row['Pattern']), expand=False),
    axis=1
)

print(df)

输出结果:

Pattern   Files Expected
0     a|d  a.csv        a
0     a|d  b.csv      NaN
0     a|d  c.csv      NaN
0     a|d  d.csv        d

方法二:列表推导式结合zip(更高效)

对于大数据量,列表推导式的执行效率比apply更高:

# 基于上述处理后的df执行提取
df['Expected'] = [
    pd.Series(file).str.extract(r'({})'.format(pattern), expand=False).iloc[0]
    for pattern, file in zip(df['Pattern'], df['Files'])
]

关键注意点

  • 给Pattern内容外层添加括号(),确保提取到正则分组的内容,和你硬编码的r'([a|d])'逻辑一致;如果你的Pattern列本身已经包含分组括号,可省略这一步。
  • 必须清理Files列的空格(str.strip()),否则空格会导致正则匹配失败。

内容的提问来源于stack exchange,提问作者John Stud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:23:09