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

基于pandas其他列值对列应用函数时出现ValueError该如何解决?

错误原因

  • apply调用语法错误:你写的df.apply(sales_gbp(df), axis=1)相当于先执行sales_gbp(df)把整个DataFrame传入函数,此时cur = df.cur拿到的是整列的Series对象,对Series做if cur == 'USD'的布尔判断时,pandas无法判断你要对整个序列还是单个元素做判断,就会抛出真值模糊的报错。apply传入自定义函数只需要写函数名,不需要加括号和参数。
  • 函数内部变量名不匹配:你定义了value = df.val,但后续计算用的是未定义的val,运行也会抛出变量未找到报错。

修复后的正确写法

首先修正自定义函数:

def sales_gbp(row):
    cur = row.cur
    val = row.val # 统一变量名
    if cur == 'USD':
        return val*0.72
    elif cur == 'EUR':
        return val*0.85
    else:
        return val

调用apply时仅传入函数名即可:

# 若val列是字符串格式的object,先转数值类型
df['val'] = df['val'].astype(float)
df['value_GBP'] = df.apply(sales_gbp, axis=1)

更高效的向量化实现(推荐)

apply逐行遍历性能很低,数据量大时建议用汇率映射的向量化操作,无需循环:

# 定义汇率映射字典
rate_map = {'USD':0.72, 'EUR':0.85, 'GBP':1}
df['val'] = df['val'].astype(float)
df['value_GBP'] = df['val'] * df['cur'].map(rate_map)

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:27:02