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

明明存在列名App,为何Pandas按行apply时出现KeyError?

DataFrame apply按行操作触发KeyError的原因与解决办法

问题场景

创建包含App、Query、Label列的DataFrame:

train_data = pd.DataFrame({
     'Query':['shoerack','shoerack','shoerack','shoerack', 'nike shoes'], 
     'App':  ['amazon', 'amazon', 'amazon', 'amazon', 'zalando'],
     'Label':[1, 1, 1, 1, 1]})

执行以下apply操作时触发KeyError: 'App':

train_data.apply(lambda row: print(row['App']))

报错信息:

KeyError                                  Traceback (most recent call last)
Cell In[20], line 4
  1 train_data = pd.DataFrame({'Query': ['shoerack','shoerack','shoerack','shoerack', 'nike shoes'], 
  2                            'App': ['amazon', 'amazon', 'amazon', 'amazon', 'zalando'],
  3                            'Label': [1, 1, 1, 1, 1]})
 ----> 4 train_data.apply(lambda row: print(row['App']))
 
KeyError: 'App'

明明App列存在,按行执行apply却报错,原因是什么?

原因分析

pandas.DataFrame.apply默认参数axis=0,即按列处理数据。此时lambda中的row实际代表的是DataFrame的每一列(一个Series对象),Series的索引是原DataFrame的行索引,自然找不到'App'这个索引值,因此触发KeyError。

解决办法

  • 指定axis=1按行处理
    修改apply调用,添加axis=1参数,让函数作用于每一行:

    train_data.apply(lambda row: print(row['App']), axis=1)
    

    此时row代表每一行的Series,索引是列名,能正常获取'App'对应的值。

  • 更高效的替代方案
    如果只是要打印App列的所有值,完全不需要用apply,直接访问列并操作更高效:

    # 直接打印整列内容
    print(train_data['App'].tolist())
    # 或逐行打印
    for app in train_data['App']:
        print(app)
    

    apply按行操作的效率远低于直接列操作,非必要场景不建议使用。

内容的提问来源于stack exchange,提问作者s.blnc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:23:19