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

使用自定义函数为pandas DataFrame新增字段触发ValueError如何解决

错误原因

你代码中df['calories'] > 200返回的是由True/False组成的Series结构(对应每一行calories列的判断结果),而Python原生的if条件判断只能接收单个布尔值,无法直接判定整个Series的真值,因此触发该报错。

解决方法

下面给出3种常用的实现方案:

方案1:使用numpy.where(最简洁,性能最优)

直接向量化运算,不需要自定义函数,一行完成赋值:

import pandas as pd
import numpy as np

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}
df = pd.DataFrame(data)

df["new_field"] = np.where(df['calories'] > 200, "OutputA", "OutputB")

print(df)

方案2:使用DataFrame.apply按行判断

如果逻辑比较复杂必须用自定义函数,可以用apply对每行进行遍历判断,需要修改自定义函数的入参为单行数据:

import pandas as pd

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}
df = pd.DataFrame(data)

# 入参改为行对象
def test_function(row):
    if row['calories'] > 200:
        return "OutputA"
    else:
        return "OutputB"

# axis=1表示按行遍历
df["new_field"] = df.apply(test_function, axis=1)

print(df)

方案3:布尔索引直接赋值

通过条件筛选分别给对应行赋值:

import pandas as pd

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}
df = pd.DataFrame(data)

# 先给所有行赋默认值
df["new_field"] = "OutputB"
# 筛选符合条件的行替换为OutputA
df.loc[df['calories'] > 200, "new_field"] = "OutputA"

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:03