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

如何在Pandas中使用df.apply将行传递给自定义函数

如何在Pandas中使用df.apply将行传递给自定义函数

嗨,我来帮你搞定这个问题!你碰到的KeyError: 'rec_id',本质原因是**df.apply()默认是按列处理数据的**,而不是你期望的按行传递。

咱们来拆解一下:当你直接调用df.apply(testapply)时,Pandas会把每一列作为一个Series对象传给testapply函数,而不是每一行。这时候函数里的row其实是某一列的数据,自然找不到'rec_id'这个键啦。

解决方案:指定axis=1参数

只需要在apply方法里加上axis=1,就能告诉Pandas“按行来处理,把每一行作为参数传给函数”。修改后的代码如下:

def testapply(row):
    print(row)
    if row['rec_id'] < 863238:
        return "X"
    # 补充等于的情况,避免遗漏
    elif row['rec_id'] > 863238 :
        return "Y"
    else:
        return "Z"

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'rec_id': [2532, 863238, 2212]}
df = pd.DataFrame(data)
# 关键:加上axis=1参数
df['result'] = df.apply(testapply, axis=1)
print(df)

运行这段代码后,每一行的Series会被传给testapply,你就可以通过row['rec_id']或者row.rec_id(两种写法都可行)轻松访问列值了。

额外小提示

如果你的函数只需要用到特定的几列,也可以直接传递这些列,这样可能更高效。比如:

# 假设函数只需要rec_id列的数据
def test_simple(rec_id):
    if rec_id < 863238:
        return "X"
    elif rec_id > 863238:
        return "Y"
    else:
        return "Z"

df['result'] = df['rec_id'].apply(test_simple)

不过如果需要同时用到多列数据,那按行传递(指定axis=1)就是最方便的方式啦。

备注:内容来源于stack exchange,提问作者Stumbling Through Data Science

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:53:12