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

