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

如何使用pandas遍历DataFrame列 解决SettingWithCopyWarning及取值错误

问题原因
  • 警告触发原因:X3是其他DataFrame切片生成的视图对象,不是独立的DataFrame实例,直接修改视图时pandas无法判断修改目标,因此抛出SettingWithCopyWarning,且部分修改不会生效,导致最终计算数值错误。
  • 原有代码可优化点:直接遍历列的写法执行效率低,且使用max、min作为变量名会覆盖Python内置函数,存在潜在风险。
正确实现方案

你当前用的是「均值中心化+极差缩放」的归一化逻辑,如果需要标准0-1归一化可以参考代码注释替换逻辑。

方案1:向量化计算(推荐)

pandas支持按列批量向量运算,无需遍历列,代码更简洁高效,不会触发警告:

# 先生成独立的DataFrame副本,解决视图修改问题
X3 = X3.copy()

# 按列批量计算均值、最大值、最小值
mean = X3.mean(axis=0)
max_val = X3.max(axis=0)
min_val = X3.min(axis=0)

# 批量执行归一化计算
X3 = (X3 - mean) / (max_val - min_val)

# 如果需要标准0-1归一化,替换为下方代码即可
# X3 = (X3 - min_val) / (max_val - min_val)

方案2:遍历列实现(兼容原有写法)

如果需要保留遍历的写法,可按如下方式修改,避免警告:

# 先生成独立的DataFrame副本,解决视图修改问题
X3 = X3.copy()

# 显式遍历列名,用loc方法赋值避免警告
for column in X3.columns:
    mean = np.mean(X3[column])
    max_val = np.max(X3[column])
    min_val = np.min(X3[column])
    X3.loc[:, column] = (X3[column] - mean) / (max_val - min_val)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:54:03