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

pandas DataFrame基于其他列值将NaN替换为0的高效实现方法

高效实现Pandas DataFrame条件空值替换

你写的逐行循环效率极低,本质是放弃了Pandas底层的向量化运算优化,所有逻辑都在Python层执行,处理千万级数据自然性能极差。

最优向量化实现方案

仅需一行代码即可完成需求,底层为C实现的批量运算,2000万行数据通常数秒就能处理完成:

# 同时满足两个条件时替换B列值:A列等于0,B列为空值
df.loc[(df['A'] == 0) & df['B'].isna(), 'B'] = 0

逻辑说明:

  • (df['A'] == 0) 筛选出A列取值为0的所有行
  • df['B'].isna() 筛选出B列为空值的所有行
  • 两个条件用&(与逻辑)拼接,同时满足的行才会触发B列赋值为0的操作,其余行完全保留原值,和你需要的效果完全一致

补充说明

你原来的循环代码还存在两个问题:

  • 语法错误:math.isnan(df.loc[i,'B']) = True 应为双等号==
  • 兼容性问题:math.isnan无法处理非数值类型的空值,用Pandas自带的isna()方法适配性更好

可选替代方案

用mask方法也可以实现相同效果,两种方案性能无明显差异:

df['B'] = df['B'].mask((df['A'] == 0) & df['B'].isna(), 0)

内容的提问来源于stack exchange,提问作者el-cheapo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:36:02