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

使用函数和条件为DataFrame新增列时遇错,求原因分析

问题原因分析与解决方案

核心错误原因

你遇到的ValueError: The truth value of a Series is ambiguous是主错误,后续的OSError是IPython回溯错误时的附加异常,根源在于代码逻辑完全不符合pandas.Series.apply()的运行机制:

  • apply()是逐元素处理Series中的每个值,但你的my_function直接操作整个df['Price']列(一个Series),df['Price'] <= 15000会返回布尔值组成的Series,Python无法将整个Series作为if判断的条件,因此抛出歧义错误。
  • 函数内多余的df.iterrows()循环完全冗余,apply本身已经完成了逐元素遍历的工作。
  • 函数参数price_label名不副实,实际接收的是单个价格数值,而非标签。

修正方案

方法1:修复自定义函数并正确使用apply

def get_price_label(price):
    if price <= 15000:
        return "Low"
    elif 15000 < price <= 38000:
        return "Average"
    else:
        return "High"

# 正确调用apply,逐元素传入价格值
df['Price Label'] = df['Price'].apply(get_price_label)

方法2:使用pandas内置分箱函数(更高效)

对于数值分箱打标签的场景,pd.cut()比自定义函数+apply更高效,代码更简洁:

import pandas as pd

# 定义分箱区间和对应标签
bins = [float('-inf'), 15000, 38000, float('inf')]
labels = ["Low", "Average", "High"]

df['Price Label'] = pd.cut(df['Price'], bins=bins, labels=labels)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:17:52