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

Pandas lookup报错One or more row labels was not found缺失值返回Not Available方案

报错的根本原因是df2的Origin列存在df1中不存在的列标签(如示例中的City D),pandas原生lookup方法遇到不存在的标签会直接抛出KeyError: 'One or more row labels was not found',不支持自定义缺省返回值,可通过以下方案实现需求:

方案1:reindex预先补全缺失列(矢量化操作,性能优先,适合大数据量)

先对df1的列进行重索引,覆盖df2所有Origin取值,不存在的列默认填充Not Available,再做匹配取值:

# 设置Destcode为索引
df1_idx = df1.set_index('Destcode')
# 补全列范围,缺失列默认填充Not Available
df1_reindex = df1_idx.reindex(columns=df2['Origin'].unique(), fill_value='Not Available')
# 匹配取值,无报错
df2['Cek Available'] = df1_reindex.lookup(df2['Destcode'], df2['Origin'])

运行后得到的df2结果如下:

DestcodeOriginCek Available
CCity AAvailable
FCity CAvailable
GCity AAvailable
DCity BAvailable
ECity DNot Available

如果使用的是pandas 1.2.0及以上版本(lookup已被标记为弃用),可以用以下写法替代lookup,效果完全一致:

df2['Cek Available'] = df1_reindex.stack().loc[tuple(zip(df2['Destcode'], df2['Origin']))].values

方案2:逐行判断(逻辑直观,适合小数据量)

数据量较小时可以用逐行判断的方式,逻辑更易理解:

def get_availability(row):
    # 列和行标签都存在才取值,否则返回缺省值
    if row['Origin'] in df1.columns and row['Destcode'] in df1['Destcode'].values:
        return df1.loc[df1['Destcode'] == row['Destcode'], row['Origin']].iloc[0]
    return 'Not Available'

df2['Cek Available'] = df2.apply(get_availability, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:24:03