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

如何遍历Pandas DataFrame的每列与单元格并实现归一化替换

嘿,我来帮你搞定这个DataFrame遍历和归一化的问题!首先先提个小细节:你写的normalise函数里有个Python语法错误——else if得改成elif,不然会报错,修正后的版本是这样的:

def normalise(theMin, theMax, theVal):
    if theMin == theVal:
        return 0
    elif theMax == theVal:
        return 1
    return (theVal - theMin) / (theMax - theMin)

接下来分两种方案给你,一种是Pandas推荐的高效向量化操作,另一种是你要求的显式遍历列和单元格的方法:

方案一:高效向量化处理(推荐)

Pandas的核心优势就是向量化操作,比逐单元格遍历快得多,尤其以后数据量大的时候更明显。我们可以用apply对每一列单独处理,先计算列的最小值和最大值,再批量应用归一化逻辑:

import numpy as np

def normalise_col(column):
    col_min = column.min()
    col_max = column.max()
    # 用numpy的where实现条件判断,批量处理整列数据
    return np.where(column == col_min, 0, 
                   np.where(column == col_max, 1, 
                           (column - col_min)/(col_max - col_min)))

# 对整个DataFrame的每一列应用函数
training_df = training_df.apply(normalise_col, axis=0)

这个方法会自动遍历每一列,然后一次性处理列内的所有单元格,代码简洁且效率高。

方案二:显式遍历列和单元格(满足你的遍历需求)

如果你确实需要逐列、逐单元格手动遍历,也可以这么做。先遍历每一列,获取该列的min和max,再遍历列内的每一行,逐个替换单元格值:

# 遍历DataFrame的每一列
for col_name in training_df.columns:
    # 获取当前列的最小值和最大值
    current_min = training_df[col_name].min()
    current_max = training_df[col_name].max()
    
    # 遍历当前列的每一行索引
    for row_idx in training_df.index:
        # 获取单元格当前值
        cell_value = training_df.loc[row_idx, col_name]
        # 应用归一化函数并替换
        training_df.loc[row_idx, col_name] = normalise(current_min, current_max, cell_value)

这种方法完全符合你“依次遍历全部4列,再遍历每一列所有行”的需求,逻辑直观,但效率不如向量化操作,适合小数据集(比如你的150行4列完全没问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:27:06