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

如何在Pandas/Python中基于A、B列条件将C列设为空值

基于条件修改DataFrame列值的正确实现

首先指出你代码中的几个问题:

  • iterrows()循环语句末尾缺少冒号,存在语法错误
  • 循环内直接使用df['A']是对整列操作,而非针对当前遍历的行做判断
  • 赋值操作误用了比较运算符==,应该用赋值运算符=
  • 未导入numpy库却使用了np.nan

推荐方法:向量化布尔索引(Pandas最优实践)

Pandas的核心优势是向量化操作,效率远高于逐行循环,直接用布尔索引定位目标行和列即可:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 4, 1, 4], 'B': [9, 2, 5, 3], 'C': [0, 0, 5, 3]})

# 用loc同时筛选满足条件的行和目标列,赋值为np.nan
df.loc[(df['A'] > 2) & (df['B'] == 3), 'C'] = np.nan

执行后,DataFrame中A列大于2且B列等于3的行,其C列值会被设为NaN。

逐行循环实现(不推荐,仅满足你的初始思路)

如果一定要用逐行遍历的方式,修正后的代码如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 4, 1, 4], 'B': [9, 2, 5, 3], 'C': [0, 0, 5, 3]})

# iterrows()返回索引和行数据,需同时接收
for idx, row in df.iterrows():
    # 针对当前行的A、B列做判断
    if row['A'] > 2 and row['B'] == 3:
        # 通过索引定位到当前行的C列,赋值为np.nan
        df.loc[idx, 'C'] = np.nan

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:55:23