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

如何通过正则修改pandas索引并匹配另一DataFrame索引

现有代码无效的原因
  • 第一,re.sub() 不会修改原字符串(Python中字符串是不可变对象),只会返回处理后的新字符串。你的循环里既没有保存re.sub的返回结果,也没有将处理后的值重新赋值给meth_450的索引,循环执行完不会对原DataFrame产生任何修改。
  • 第二,你写的正则规则本身不符合数据特征:正则中写了匹配冒号:的逻辑,但你的索引字符串里不存在冒号,全由连字符-分隔字段,就算给返回值赋值,也无法匹配到目标片段,得不到正确的截取结果。
正确实现方式

不需要写循环,直接用pandas自带的向量化字符串操作即可,效率更高也更简洁,推荐用字符串拆分拼接的写法,不容易写错规则:

# 按-拆分索引字符串,取前3段后重新用-拼接,赋值回原索引
meth_450.index = meth_450.index.str.split('-').str[:3].str.join('-')

执行完可以先打印前几行索引验证结果:

print(meth_450.index[:5])

预期输出为:

Index(['TCGA-06-0125', 'TCGA-06-0125', 'TCGA-06-0152', 'TCGA-06-0152', 'TCGA-06-0171'], dtype='object')

确认索引格式正确后,就可以执行你原来写的索引匹配筛选代码:

clin = clin[clin.index.isin(meth_450.index)]

如果你更习惯用正则实现,也可以用正则匹配截取的写法,效果完全一致:

# 正则捕获第三个连字符前的内容
meth_450.index = meth_450.index.str.extract(r'^([^-]+-[^-]+-[^-]+)')[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:33:35