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

pandas遍历行列按条件替换值:将10-100间数值除以10

解决方案

不要手写逐元素循环,用pandas内置的批量操作实现,自动跳过非数值列,逻辑简洁无索引错误:

import pandas as pd
import numpy as np

# 测试数据构造
time = ['11:50', '12:50', '13:50']
data_1 = {'time': time,
          'n1': [1, 5, 80],
          'n2': [2, 6 ,7],
          'n3': [3, 70 ,6],
          'n4': [40, 8, 500],
        }
df1 = pd.DataFrame(data = data_1)

# 核心处理逻辑
# 筛选所有数值类型列,自动排除time等非数值列
numeric_columns = df1.select_dtypes(include='number')
# 定位10<值<100的位置,替换为原值除以10的结果
df1[numeric_columns.columns] = numeric_columns.mask(
    cond=(numeric_columns > 10) & (numeric_columns < 100),
    other=numeric_columns / 10
)

处理后得到的结果完全符合预期:

timen1n2n3n4
11:501234
12:505678
13:50876500

原循环写法的问题

给出的循环无法得到正确结果,核心问题有3个:

  • 遍历逻辑错误:for i in df实际遍历的是DataFrame的列名,代码中完全没有用到遍历得到的i,仅靠j、k两个手动自增的索引定位单元格,会出现严重的位置错位,数据量稍大还会触发索引越界报错
  • 赋值方式不规范:用df[j][k]这种链式索引赋值,本质是在DataFrame的临时副本上修改,改动不会同步到原数据,还会触发SettingWithCopyWarning
  • 缺少类型判断:循环没有跳过非数值列,一旦对time列的字符串值做大小比较,会直接触发类型错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:30:44