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

如何在含多数据类型的Pandas DataFrame中将负数替换为0

解决多类型DataFrame中仅数值列负数替换为0的问题

直接执行df[df<0]=0报错的核心原因:你的DataFrame包含字符串/日期类型列,这类列无法与整数0做大小比较,触发了类型不兼容错误。

以下是两种针对多类型DataFrame的可行解决方案:

方案1:使用clip方法快速替换

clip方法可指定数值上下界,设置下界为0后,所有小于0的数值会被替换为0,大于等于0的数值保持不变,且仅对数值型列生效:

import pandas as pd

# 读取Excel数据
df = pd.read_excel('C:/X/X/X/Book1.xlsx')
# 筛选所有数值类型列(int、float等)
numeric_columns = df.select_dtypes(include=['number']).columns
# 对数值列应用clip替换负数
df[numeric_columns] = df[numeric_columns].clip(lower=0)

方案2:使用where条件替换

通过where方法保留满足≥0条件的值,不满足的直接替换为0,同样仅针对数值列:

import pandas as pd

df = pd.read_excel('C:/X/X/X/Book1.xlsx')
numeric_columns = df.select_dtypes(include=['number']).columns
# 保留≥0的值,否则替换为0
df[numeric_columns] = df[numeric_columns].where(df[numeric_columns] >= 0, 0)

关键说明

  • select_dtypes(include=['number'])会自动识别整数、浮点等数值类型列,自动排除日期(datetime64)、字符串(object)类型列,完美适配多类型场景。
  • 两种方法均不会修改非数值列内容,确保日期、字符数据保持原样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:20:28