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

Python DataFrame含NaN的列如何替换负值为0且保留NaN

报错原因

代码触发类型比较错误,是因为Data列当前为混合类型,存在字符串格式的值,字符串和整数/浮点数无法直接做大小比较。

实现方案

不需要写多条件筛选行的复杂逻辑,两步操作即可满足需求,同时自动解决类型问题、保留原有NaN值:

  • 先将列安全转换为数值类型,统一数据格式
  • 用下界截断方法直接把小于0的值替换为0,NaN不会被改动

对应代码:

import pandas as pd

# 安全转换列为数值类型,无法解析的异常值转为NaN,不影响原有正常数值和NaN
df['Data'] = pd.to_numeric(df['Data'], errors='coerce')
# 截断所有小于0的值为0,大于0的值保持原样,NaN自动保留
df['Data'] = df['Data'].clip(lower=0)

如果确认列内没有无法转数值的脏数据,可以合并为一行写法:

df['Data'] = pd.to_numeric(df['Data'], errors='coerce').clip(lower=0)

执行后得到的结果和预期完全一致:

Data
0   1.0
1   0.5
2   0.0
3   0.0
4   0.0
5   NaN
6   NaN

说明:如果需要保留整数位的数值格式,可以在转换后追加.astype('Int64')(pandas支持带NaN的整数类型)即可,不会改变替换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:39:24