pandas如何用apply()遍历DataFrame将大于1的数值改为1
pandas DataFrame全表数值替换实现方案
你需要将records表中所有大于1的数值统一替换为1,仅保留0、1两类值,可参考如下实现方式:
最优方案:向量化操作(推荐,性能最高)
直接利用pandas的向量化特性,无需遍历,一行代码即可完成:
records[records > 1] = 1
也可以用where方法实现相同效果:
records = records.where(records <= 1, 1)
apply实现方案
如果需要使用apply完成遍历,正确写法如下:
# 方式1:apply嵌套遍历每列的每个元素 records = records.apply(lambda col: col.apply(lambda val: 1 if val > 1 else val)) # 方式2:旧版本pandas可使用applymap直接遍历全表所有元素 records = records.applymap(lambda val: 1 if val > 1 else val)
你原来的代码存在3处问题:
- 三元表达式缺少
else分支,Python中1 if x>1的写法不合法,必须补充else后的返回值 apply默认传入的参数是整列数据,不是单个元素,无法直接和1做比较- 不需要手动写
for循环,apply会自动完成遍历操作
如果你的表中包含非数值列,建议先筛选数值列操作,避免类型报错:
num_cols = records.select_dtypes(include='number').columns records[num_cols] = records[num_cols].where(records[num_cols] <=1, 1)
参考示例图:

内容的提问来源于stack exchange,提问作者Fuustack
相关产品推荐
相关产品推荐

