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

如何在Pandas中对多列使用mask方法替换负值?

问题

我有一个包含20列的数据集,只需要把ArrDelay和DepDelay两列里的负值替换成0。但数据里有字符串类型的列,没法对全量数据用mask方法;单独对一列用mask能正常跑,但想同时处理这两列。

当前代码:

data = data.mask(data.ArrDelay.lt(0),0) #how to add 'DepDelay'?
data

数据集示例:

FlightNum ArrDelay DepDelay TailNum Month Dest
3232      3        -6       432G    1     ORX
4342      -2       4        476N    2     TOL
6344      -1       -4       643G    3     JFK
7564      5        13       653A    4     CVO

期望结果:

FlightNum ArrDelay DepDelay TailNum Month Dest
3232      3        0        432G    1     ORX
4342      0        4        476N    2     TOL
6344      0        0        643G    3     JFK
7564      5        13       653A    4     CVO
解决方案

方法1:指定列应用mask

直接选中目标列,只对这两列执行mask操作,不会影响其他字符串列:

cols = ['ArrDelay', 'DepDelay']
data[cols] = data[cols].mask(data[cols] < 0, 0)

方法2:用clip简化操作

clip函数可以直接把数值限制在指定区间,这里设置下限为0,所有小于0的值都会被替换成0,代码更简洁:

cols = ['ArrDelay', 'DepDelay']
data[cols] = data[cols].clip(lower=0)

方法3:apply逐列处理

如果需要自定义更复杂的逻辑,也可以用apply对目标列逐个处理:

cols = ['ArrDelay', 'DepDelay']
data[cols] = data[cols].apply(lambda x: x.mask(x < 0, 0))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:55:20