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

如何编写Python函数对DataFrame的数值列执行MinMaxScaler归一化?

问题修正与代码优化

你的代码存在几个关键错误,导致出现'type' object is not iterable报错,同时逻辑上也有漏洞,下面是具体的错误分析和修正后的代码:

错误点拆解

  • 开头直接把传入的df赋值为空pd.DataFrame(),直接丢失了输入的原始数据,这是致命问题。
  • 循环遍历的是pd.DataFrame这个类(类型对象),而非传入的DataFrame的列名,所以会触发类型不可迭代的错误。
  • 判断列类型时,dtype(column)用法错误,应该通过df[column].dtype获取对应列的数据类型。
  • 找到第一列就立即return,后续符合条件的列根本不会被处理,逻辑不完整。

修正后的代码

def standard(df):
    """接收一个DataFrame,返回标准化int类型数值列后的DataFrame"""
    from sklearn.preprocessing import MinMaxScaler
    scaler = MinMaxScaler()
    # 复制原DataFrame,避免修改输入的原始数据
    scaled_df = df.copy()
    # 筛选所有int类型的列
    int_columns = [col for col in scaled_df.columns if 'int' in str(scaled_df[col].dtype)]
    # 对筛选出的列统一执行MinMax缩放
    scaled_df[int_columns] = scaler.fit_transform(scaled_df[int_columns])
    return scaled_df

关键修改说明

  • 用df.copy()复制原始数据,保证输入的DataFrame不会被函数修改(这是处理DataFrame时的最佳实践)。
  • 遍历scaled_df.columns获取所有列名,而非遍历DataFrame类,解决了迭代错误。
  • 用列表推导式一次性筛选出所有int类型的列,再统一进行缩放,效率更高且逻辑完整。
  • 修正了列数据类型的获取方式,确保能正确识别int64类型的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:36:18