如何在含多数据类型的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
相关产品推荐
相关产品推荐

