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

如何高效修改代码:DataFrame索引存在则追加结果,不存在则跳过?

解决方案

针对你遇到的KeyError问题,同时保证重复执行的高效性,提供以下几种修改方案:

基础方案:提前检查索引存在性

通过快速判断gene是否在DataFrame索引中,避免触发KeyError,逻辑简单直观:

def get_bins(gene, bins):
    # 利用DataFrame索引的哈希查找(O(1))快速判断存在性
    if gene not in bins.index:
        return None
    q = bins._get_value(gene, 'quantile')
    # 筛选同quantile的行并移除当前gene
    df = bins[bins['quantile'] == q].drop(index=gene)
    return df

binList = []
for g in gs:
    result = get_bins(g, bins)
    # 仅当结果有效时添加到列表
    if result is not None:
        binList.append(result)

高效优化方案:预分组复用(适合重复执行场景)

如果需要多次执行该逻辑,提前按quantile分组可以避免重复筛选行(原逻辑每次筛选是O(n),预分组后是O(1)查找),大幅提升效率:

# 提前执行一次分组,后续重复调用直接复用
quantile_groups = bins.groupby('quantile')

def get_bins(gene, bins, quantile_groups):
    if gene not in bins.index:
        return None
    q = bins._get_value(gene, 'quantile')
    # 直接获取预分组的结果,无需重复筛选
    group_df = quantile_groups.get_group(q)
    return group_df.drop(index=gene)

binList = []
for g in gs:
    result = get_bins(g, bins, quantile_groups)
    if result is not None:
        binList.append(result)

异常捕获方案:适合大部分gene存在的场景

如果你的gs列表中大部分gene都存在于索引中,用try-except捕获KeyError的开销更低:

def get_bins(gene, bins):
    try:
        q = bins._get_value(gene, 'quantile')
    except KeyError:
        return None
    df = bins[bins['quantile'] == q].drop(index=gene)
    return df

binList = []
for g in gs:
    result = get_bins(g, bins)
    if result is not None:
        binList.append(result)

方案选择建议

  • 若gene不存在的情况较多:选基础方案,提前过滤减少无效操作
  • 若需要重复执行多次:选预分组方案,从根本上降低每次筛选的时间复杂度
  • 若大部分gene都存在:选异常捕获方案,利用Python异常捕获的低开销特性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:01:43