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

如何在Pandas的.str.extract()正则中使用DataFrame列作为变量

解决方法

由于pandas.Series.str.extract()仅支持固定正则表达式,无法直接将每行的column1值作为动态变量传入,所以我们可以通过逐行处理的方式实现需求,下面提供两种实用方案:

方案一:正则表达式动态匹配

通过apply()逐行生成正则表达式,匹配目标关键词前的对应片段:

import pandas as pd
import re

# 示例数据
df = pd.DataFrame({
    'column1': ['key1', 'key2', 'key3'],
    'column2': ['word1/word2/key1', 'word3/word4/word5/key2', 'word6/key3']
})

def extract_with_regex(row):
    # 转义关键词,避免正则特殊字符(如.*?)干扰匹配
    escaped_key = re.escape(row['column1'])
    # 正则逻辑:兼容关键词前有1个或多个斜杠的情况,捕获关键词前紧邻的片段
    pattern = rf'(?:.*/)?(.*)/{escaped_key}'
    match_result = re.search(pattern, row['column2'])
    # 匹配成功返回捕获内容,失败返回None
    return match_result.group(1) if match_result else None

# 生成提取结果列
df['extracted'] = df.apply(extract_with_regex, axis=1)

方案二:字符串分割法(更直观)

直接将column2按斜杠分割为列表,找到关键词所在位置后取前一个元素:

import pandas as pd

# 示例数据同上
df = pd.DataFrame({
    'column1': ['key1', 'key2', 'key3'],
    'column2': ['word1/word2/key1', 'word3/word4/word5/key2', 'word6/key3']
})

def extract_with_split(row):
    path_parts = row['column2'].split('/')
    target_key = row['column1']
    if target_key in path_parts:
        key_index = path_parts.index(target_key)
        # 确保关键词不是第一个片段,避免索引越界
        if key_index > 0:
            return path_parts[key_index - 1]
    # 未找到关键词或关键词在首位时返回None
    return None

df['extracted'] = df.apply(extract_with_split, axis=1)

两种方案运行后,df['extracted']的结果均为:['word2', 'word5', 'word6'],完全符合需求。

内容的提问来源于stack exchange,提问作者Marcley Moraes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:06:25