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

如何基于两个条件替换DataFrame中的所有值

解决DataFrame多条件替换为NaN的问题

嗨,这事儿其实很简单,核心就是把多个条件用逻辑运算符组合起来就行!我给你一步步讲清楚:

首先先回顾下你原本的单一条件写法,应该是类似这样的吧?

# 单一条件:把-0.5到0.5之间的值换成NaN
df = df.mask((df > -0.5) & (df < 0.5))

如果要加第二个条件,只需要用&(表示“且”,两个条件同时满足才替换)或者|(表示“或”,满足任意一个条件就替换)把条件串起来就行,注意每个条件都要用括号括起来,不然会因为运算符优先级出问题!

举两个常见场景的例子:

场景1:满足任意一个条件就替换成NaN

比如你想把「-0.5到0.5之间的值」或者「大于2的值」都换成NaN:

import pandas as pd
import numpy as np

# 先搞个示例DataFrame方便测试
df = pd.DataFrame({
    'col1': [-1.2, -0.3, 0.4, 1.8, 2.5],
    'col2': [0.6, -0.6, 0.2, 3.1, -0.1]
})

# 组合两个条件:(-0.5 < x < 0.5) 或者 (x > 2)
df_updated = df.mask( ((df > -0.5) & (df < 0.5)) | (df > 2) )

运行后你会看到,-0.3、0.4、0.2、-0.1还有2.5、3.1这些值都变成NaN了。

场景2:同时满足两个条件才替换成NaN

比如你只想把「-0.5到0.5之间并且是正数」的值换成NaN:

# 组合条件:(-0.5 < x < 0.5) 并且 (x > 0)
df_updated = df.mask( (df > -0.5) & (df < 0.5) & (df > 0) )

这时候只有0.4、0.2这些符合两个条件的值会被替换成NaN,负数的-0.3、-0.1会保留。

补充个小知识点:

如果你习惯用where方法的话,逻辑是反过来的——where会把不满足条件的值换成NaN,所以写法要调整一下:

# 用where实现和第一个场景一样的效果:满足条件的保留,不满足的换成NaN
df_updated = df.where( ~((df > -0.5) & (df < 0.5)) & ~(df > 2) )

这里的~表示取反,意思是“既不在-0.5到0.5之间,也不大于2”的值才保留,其他换成NaN,和mask的效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:26:33