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

Python:查找QA数据集context列内answer子文本的起始与结束索引

问题修复方案

报错原因

你调用apply的对象是df['answer_start']单列,传入lambda的参数x是该列的单个值(初始为空/整型),自然无法通过x['answer']、x['context']取其他列的字段,所以抛出整型不可下标访问的报错。

修复方案(无显式循环)

方案1:行级apply(最简实现)

直接对整个DataFrame按行遍历,每行可以访问所有列的字段,同时用Python原生的字符串find方法代替正则匹配,避免answer包含正则特殊字符导致匹配错误:

# 计算起始索引,匹配失败返回-1
df['answer_start'] = df.apply(lambda row: row['context'].find(row['answer']), axis=1)
# 结束索引 = 起始索引 + answer字符串长度,context[start:end]正好可以取出完整answer
df['answer_end'] = df['answer_start'] + df['answer'].str.len()

方案2:列表推导(性能更优,适合大数据集)

行级apply在数据量较大时性能一般,用zip绑定两列后用列表推导计算,速度是行级apply的3-5倍:

df['answer_start'] = [ctx.find(ans) for ctx, ans in zip(df['context'], df['answer'])]
df['answer_end'] = df['answer_start'] + df['answer'].str.len()

注意事项

如果存在answer不在context中的场景,find方法会返回-1,你可以后续过滤掉answer_start == -1的异常记录即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:48:03