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
相关产品推荐
相关产品推荐

