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

Pandas中如何在for循环内使用if else语句及解决对应报错

问题原因

你的代码存在3个核心问题,直接触发了报错:

  • 遍历逻辑完全错误:直接for people in andrew_lewis迭代DataFrame对象,拿到的是DataFrame的列名字符串,根本不是逐行的样本数据,和你想要遍历每一行的预期完全不符。
  • 条件判断返回的是整列序列:if语句里的andrew_lewis['MRR'] == 'KC2'会生成一个和原表长度一致的布尔型Series(每一行对应一个「MRR列是否等于KC2」的判断结果),Python原生if只能识别单个布尔值,无法直接判断一整个序列的真假,就会抛出你看到的ValueError: The truth value of a Series is ambiguous报错。
  • 计算结果没有回写:就算判断逻辑能正常运行,andrew_lewis['payout'] * 100只是临时做了乘法计算,没有把结果赋值回原DataFrame的对应列,根本不会修改原数据。
正确实现方式

Pandas做这类按条件改值的操作,优先用向量化方法,不要写for循环,运行效率比逐行遍历高几十到上百倍,是官方推荐的标准写法:

import numpy as np

# 满足MRR=KC2的行,payout列值乘100;不满足的行保留原payout值
andrew_lewis['payout'] = np.where(
    andrew_lewis['MRR'] == 'KC2',
    andrew_lewis['payout'] * 100,
    andrew_lewis['payout']
)

# 如果需要检测到不符合条件的行就输出wrong,可以加下面这段判断
if (andrew_lewis['MRR'] != 'KC2').any():
    print('wrong')

如果你因为特殊业务需求必须逐行遍历处理(数据量大于1万行时不推荐,速度会非常慢),可以用iterrows()接口实现逐行操作:

for idx, row in andrew_lewis.iterrows():
    if row['MRR'] == 'KC2':
        andrew_lewis.loc[idx, 'payout'] = row['payout'] * 100
    else:
        print('wrong')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:18:22