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

Pandas中apply函数处理DataFrame多列时报错的问题求助

解决多列替换yes/no报错的问题

你大概率是用了apply处理多列,但你的函数是针对单个值编写的——apply处理多列时,默认会把每一列当成一个Series传给函数,而非逐个元素传入,这就导致了报错。

给你几个可行的解决方案:

方案1:用applymap代替apply

这是最直接的修改,applymap会对DataFrame里的每个元素单独应用你的函数,和单列用apply的逻辑完全一致:

def replace_yn(val):
    if val == 'yes':
        return 0
    elif val == 'no':
        return 1
    # 可选:处理非yes/no的情况,避免返回None
    return val

# 对指定多列应用函数
df[['col1', 'col2', 'col3']] = df[['col1', 'col2', 'col3']].applymap(replace_yn)

方案2:直接用pandas的replace方法(更高效)

没必要写自定义函数,pandas自带的replace可以直接批量替换,性能更好:

# 对指定多列替换yes为0,no为1
df[['col1', 'col2']] = df[['col1', 'col2']].replace({'yes': 0, 'no': 1})

方案3:修改函数适配Series(如果一定要用apply)

如果坚持要用apply,可以把函数改成处理Series的形式,用map逐个处理元素:

def replace_yn_col(col):
    return col.map(lambda x: 0 if x == 'yes' else 1 if x == 'no' else x)

df[['col1', 'col2']] = df[['col1', 'col2']].apply(replace_yn_col)

优先选方案2,代码简洁还高效;如果有特殊逻辑需要自定义函数,就用方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:34:57