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

如何从DataFrame的Desc列提取it_与$$$之间的子串?

解决DataFrame中提取指定子串的问题

原代码的问题

  • 直接对df['DESC']调用find()方法是错误的,Series的find()不会逐元素执行,返回的是标量值而非每个元素对应的索引,导致后续切片逻辑完全失效。
  • 原代码里idx1 + len(sub1) + 1多了一个+1,it_的长度是3,idx1 + len(sub1)已经指向目标子串的起始位置,不需要额外加1。

解决方案1:正则表达式(最简洁推荐)

用str.extract()配合正则表达式,直接匹配it_和$$$之间的内容:

import pandas as pd

# 示例数据
data = {'DESC': [
    '_000it_ZZZ$$$-',
    '_0780it_ZBZT$$$-',
    '_011it_BB$$$-',
    '_000it_CCCC$$$-'
]}
df = pd.DataFrame(data)

# 提取目标子串
df['results'] = df['DESC'].str.extract(r'it_(.*?)\$\$\$', expand=False)

正则说明:it_(.*?)\$\$\$中,it_匹配固定前缀,(.*?)是非贪婪匹配任意字符(避免匹配到多余内容),\$\$\$匹配后缀$$$($是正则特殊字符,需要转义)。

解决方案2:逐元素索引切片

如果不想用正则,修正原代码逻辑,用str.find()和str.slice()逐元素处理:

sub1 = "it_"
sub2 = "$$$"

# 计算每个元素的目标子串起始/结束索引
start_idx = df['DESC'].str.find(sub1) + len(sub1)
end_idx = df['DESC'].str.find(sub2)

# 切片提取
df['results'] = df['DESC'].str.slice(start=start_idx, stop=end_idx)

两种方法最终得到的results列结果都是:['ZZZ', 'ZBZT', 'BB', 'CCCC'],符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:25:46