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

机器学习预处理:如何实现Pandas DataFrame列的normalise及相关疑问

问题背景

我目前正在为Machine Learning任务预处理数据集,希望对所有数值列执行normalise操作。我找到了一些解决方案,但均无法实现我预期的效果。

我的目标是将列按以下方式归一化:最小值转换为0,最大值转换为1:


示例

columncolumn_normalised
100
301
200.5

疑问

  • 如何实现这一目标?
  • 是否需要对数值编码的分类特征执行normalise,还是保持原样?

解决方案

1. 实现0-1归一化的方法

方法一:Pandas手动计算

适合自定义单/多列处理,逻辑直观:

import pandas as pd

# 示例数据集
df = pd.DataFrame({'column': [10, 30, 20], 'num_col2': [1, 5, 3]})

# 对指定列执行归一化
def min_max_normalize(series):
    return (series - series.min()) / (series.max() - series.min())

df['column_normalised'] = min_max_normalize(df['column'])
# 批量处理所有数值列
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
df[numeric_cols] = df[numeric_cols].apply(min_max_normalize)

方法二:Scikit-learn的MinMaxScaler

适合标准化流水线式处理,是机器学习预处理的常用方案:

from sklearn.preprocessing import MinMaxScaler
import pandas as pd

scaler = MinMaxScaler(feature_range=(0, 1))
df = pd.DataFrame({'column': [10, 30, 20], 'num_col2': [1, 5, 3]})

# 筛选数值列并归一化
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
df[numeric_cols] = scaler.fit_transform(df[numeric_cols])

2. 数值编码的分类特征是否需要归一化?

分场景判断:

  • 不需要归一化:如果是**标签编码(Label Encoding)**的特征(比如将["猫","狗","兔"]编码为[0,1,2]),这类数值仅作为类别标识,没有大小意义,归一化会混淆类别逻辑,直接保留原编码即可。
  • 可以考虑归一化:如果是有序分类的数值编码(比如将["差","中","优"]编码为[1,2,3]),且模型对特征尺度敏感(如线性回归、神经网络、SVM),归一化能帮助模型更快收敛;若模型对尺度不敏感(如决策树、随机森林),归一化与否影响不大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:27:37