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

Pandas出现KeyError: 'GCIF_NO'问题求助,已确认列存在

问题描述

我编写了如下Python代码:

merged_df = pd.merge(df1, df2, on='GCIF_NO', how='left')

def TAB_Online(row):
    if pd.isnull(row['GCIF_NO']):
        return 0
    else:
        return 1

随后执行代码:

df1['TAB_Online'] = merged_df.apply(TAB_Online)

但返回错误:

KeyError: 'GCIF_NO'

我通过以下代码检查确认df1中存在'GCIF_NO'列:

# Example check to verify column existence
if 'GCIF_NO' in df1.columns:
    print("Column 'GCIF_NO' exists in df1")
else:
    print("Column 'GCIF_NO' does not exist in df1")

结果显示该列存在,请问问题出在哪里?

问题原因与解决办法
  • 核心问题:merged_df.apply(TAB_Online)默认按列(axis=0)执行,此时传入函数的row是整列数据,而非单行记录。列数据的索引是行号,自然找不到名为'GCIF_NO'的键,因此抛出KeyError。

  • 快速修复:如果坚持使用自定义函数,需指定apply按行执行(axis=1):

    df1['TAB_Online'] = merged_df.apply(TAB_Online, axis=1)
    
  • 更高效的实现:你的函数逻辑本质是判断GCIF_NO是否非空,完全可以用pandas内置方法替代,无需自定义函数:

    # 直接利用notna()判断非空,转成int类型(True→1,False→0)
    df1['TAB_Online'] = merged_df['GCIF_NO'].notna().astype(int)
    

    甚至不需要用到merged_df,直接用原df1的列即可:

    df1['TAB_Online'] = df1['GCIF_NO'].notna().astype(int)
    
  • 补充说明:如果你的真实需求是判断左连接后是否匹配到df2中的数据,应该检查df2侧的列是否为空,而非左表的GCIF_NO(左连接会保留左表所有行,GCIF_NO必然存在)。例如假设df2有唯一标识列USER_ID:

    df1['TAB_Online'] = merged_df['USER_ID'].notna().astype(int)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:13:11