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

匹配Pandas索引与列表补全缺失字符,解决维度不匹配报错

问题描述

需求:将common_samples中每个字符串去掉最后一位后,与mrna_raw.index进行匹配,匹配成功的条目,把mrna_raw.index中的对应值替换为common_samples的完整字符串。

原代码直接比较长度不同的列表与Pandas索引,触发报错:ValueError: ('Shapes must match', (323,), (202,)),原代码如下:

import pandas as pd

common_samples = pd.Index(set(kirp_meth.columns)&set(mrna_norm.index)&set(kirp_mut.index)&set(kirp_cna.index)&set(kirp_protein.index)).sort_values()

if [x[:-1] for x in common_samples] == mrna_raw.index:
    mrna_raw.index + [x[-1:] for x in common_samples]

示例数据

common_samples

Index(['TCGA-2K-A9WE-01A', 'TCGA-2Z-A9J1-01A', 'TCGA-2Z-A9J3-01A'],
      dtype='object', length=3)

mrna_raw.index

Index(['TCGA-2K-A9WE-01', 'TCGA-2Z-A9J1-01', 'TCGA-2Z-A9J2-01',
       'TCGA-2Z-A9J3-01'],
      dtype='object', length=4)

对应DataFrame

pd.DataFrame({'A1BG': {'TCGA-2K-A9WE-01': 391.94,
  'TCGA-2Z-A9J1-01': 68.91,
  'TCGA-2Z-A9J2-01': 37.0},
 'A1CF': {'TCGA-2K-A9WE-01': 8.0,
  'TCGA-2Z-A9J1-01': 75.0,
  'TCGA-2Z-A9J2-01': 14.0},
 'A2BP1': {'TCGA-2K-A9WE-01': 1.0,
  'TCGA-2Z-A9J1-01': 0.0,
  'TCGA-2Z-A9J2-01': 0.0}})

期望输出

新的mrna_raw.index:

Index(['TCGA-2K-A9WE-01A', 'TCGA-2Z-A9J1-01A', 'TCGA-2Z-A9J3-01A'],
      dtype='object', length=3)
解决方案

原代码的核心问题是逻辑错误——试图整体比较两个长度不同的序列,而非逐个匹配替换。正确思路是通过字典建立短样本名到完整样本名的映射,再筛选替换索引:

修正后的代码:

import pandas as pd

# 保留原common_samples生成逻辑
common_samples = pd.Index(set(kirp_meth.columns)&set(mrna_norm.index)&set(kirp_mut.index)&set(kirp_cna.index)&set(kirp_protein.index)).sort_values()

# 构建短样本名到完整样本名的映射字典
sample_map = {sample[:-1]: sample for sample in common_samples}

# 筛选匹配行并替换索引
mrna_raw = mrna_raw[mrna_raw.index.isin(sample_map.keys())].rename(index=sample_map)

代码说明

  • sample_map:用字典推导式快速建立映射,查询效率远高于循环比对;
  • mrna_raw.index.isin(sample_map.keys()):自动过滤掉不匹配的索引条目(如示例中的TCGA-2Z-A9J2-01);
  • .rename(index=sample_map):将符合条件的索引直接替换为common_samples中的完整字符串。

该方案既解决了原代码的形状不匹配报错,又精准实现了需求,同时保证了代码运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:52:08