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

Python中DataFrame应用自定义函数报ValueError问题求助

问题分析与修复方案

你的代码存在几个关键问题,导致了这个错误,逐一解决如下:

1. apply的处理方向错误

df.apply(function)默认是按列处理(axis=0),此时传入函数的参数是每一列的Series,而非单行数据。你需要指定axis=1让它按行处理,这样函数才能拿到每一行的所有列数据。

2. 语法错误

  • 条件判断要用比较运算符==,你写的=是赋值运算符,会导致逻辑错误。
  • Python是大小写敏感的,If要改成小写的if。
  • 如果product1是字符串常量,需要用引号包裹;如果是变量则保留原样。

3. 缺少默认返回值

函数只定义了符合条件时的返回值,没有处理不符合条件的情况,会导致这些行返回None,建议补充默认返回值(比如0或者其他你需要的值)。

修复后的代码

import pandas as pd

df = pd.DataFrame(data)

def function(row):
    if row['product'] == 'product1':
        if row['tenure'] > 4:
            return 19
    return 0  # 不符合条件时的默认返回值

X = df.apply(function, axis=1)

更高效的替代方案

用apply按行处理在数据量大时效率较低,推荐用pandas的矢量化操作,性能提升明显:

方法1:使用numpy.where

import numpy as np

condition = (df['product'] == 'product1') & (df['tenure'] > 4)
X = np.where(condition, 19, 0)

方法2:使用df.loc

X = df.copy()
X['result'] = 0
X.loc[(X['product'] == 'product1') & (X['tenure'] > 4), 'result'] = 19
# 若仅需结果列,直接取X['result']即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:20:28