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

如何在Python中标准化与归一化数据?代码报错求解决

问题分析与修正方案

原代码的核心错误是对sklearn预处理工具的调用方式完全错误,同时未考虑数据中的非数值列和缺失值问题,以下是修正后的完整代码及说明:

主要错误点

  • StandardScaler是sklearn.preprocessing中的类,不能直接通过DataFrame对象调用,必须先实例化类,再用fit_transform方法处理数据
  • normalize是sklearn.preprocessing中的函数,不是DataFrame的方法,需直接调用并传入数值型数据
  • 未处理数据中的非数值列和缺失值,这会导致预处理函数报错
  • 计算标准差时,pandas的方法是std()而非stdev()

修正后的代码

import pandas as pd
from sklearn import preprocessing

# 读取数据
hmeq = pd.read_csv('hmeq_small.csv')

# 1. 预处理:筛选数值型列并填充缺失值(避免StandardScaler报错)
numeric_cols = hmeq.select_dtypes(include=['int64', 'float64']).columns
hmeq_numeric = hmeq[numeric_cols].fillna(hmeq[numeric_cols].mean())

# 2. 标准化处理
scaler = preprocessing.StandardScaler()
# fit_transform返回数组,转为DataFrame并保留原列名
hmeqStand = pd.DataFrame(scaler.fit_transform(hmeq_numeric), columns=numeric_cols)

# 3. 归一化处理(默认L2归一化,按行处理)
normalized_data = preprocessing.normalize(hmeq_numeric)
hmeqNorm = pd.DataFrame(normalized_data, columns=numeric_cols)

# 4. 输出统计信息
print("标准化数据的均值:\n", hmeqStand.mean())
print("\n标准化数据的标准差:\n", hmeqStand.std())
print("\n归一化数据的均值:\n", hmeqNorm.mean())
print("\n归一化数据的标准差:\n", hmeqNorm.std())

关键说明

  • 先筛选数值型列:标准化/归一化只适用于数值数据,需排除字符串等非数值列
  • 填充缺失值:StandardScaler和normalize都无法处理NaN值,这里用列均值填充,你也可以根据需求用中位数、0或其他方式填充
  • 标准化流程:实例化StandardScaler → 用fit_transform拟合并转换数据 → 转为DataFrame保留列名
  • 归一化流程:直接调用preprocessing.normalize传入数值数据 → 转为DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:52:13