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

如何将pandas DataFrame中大于1的数值替换为1,0保持不变

问题原因

  1. 你调用df.apply(find_value, axis=1)时,传入find_value的参数是整行的Series对象,而非单个单元格的值,int(x)执行报错后会进入except分支直接返回原行数据,因此DataFrame没有任何变化。
  2. 你编写的find_value逻辑不符合需求:原有等于1的数值会被误修改为0,不符合“仅将大于1的数值改为1、0保持不变”的要求。

解决方案

方案1:向量化操作(推荐,性能远高于apply类遍历方法)

直接筛选数值列做批量替换,代码简洁效率高:

import pandas as pd
# 示例DataFrame
df = pd.DataFrame([ ['Manila', 5,12,0], ['NY',9,0,14], ['Berlin',8,10,6] ], columns = ['a','b','c','d'])

# 筛选所有数值类型的列
num_cols = df.select_dtypes(include='number').columns
# 大于1的数值裁剪为1,其余值保持不变
df[num_cols] = df[num_cols].clip(upper=1)

如果需要更灵活的判断条件,也可以用where写法实现同样效果:

df[num_cols] = df[num_cols].where(df[num_cols] <= 1, 1)

方案2:applymap实现(针对单元格逐一处理)

如果需要用类apply的方法实现,可以用applymap对每个单元格单独处理:

def find_value(x):
    # 仅处理数值类型
    if isinstance(x, (int, float)):
        return 1 if x > 1 else x
    # 非数值类型直接返回
    return x

df = df.applymap(find_value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:15:01