如何在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
相关产品推荐
相关产品推荐

