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

如何将DataFrame数据归一化至[-1,1]区间?

将DataFrame变量归一化至[-1,1]区间的解决方案

下面提供几种可行的实现方案,适配你已经熟悉的sklearn工具或手动实现逻辑:

方法1:使用MaxAbsScaler(sklearn内置)

MaxAbsScaler专门用于将特征缩放至[-1,1]区间,原理是将每个特征除以该特征的最大绝对值,无需额外处理正负值:

from sklearn.preprocessing import MaxAbsScaler
import pandas as pd

# 假设你的原始DataFrame为df
scaler = MaxAbsScaler()
# 拟合并转换数据,保留原列名
scaled_df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

该方法适合特征本身存在正负值、且希望基于最大绝对值进行缩放的场景,不会改变数据的分布形态。

方法2:修改MinMaxScaler的输出范围

你之前使用的MinMaxScaler支持通过feature_range参数自定义输出区间,直接设置为(-1, 1)即可:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(-1, 1))
scaled_df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

其底层逻辑是将原始数据先归一化至[0,1],再通过线性变换映射到[-1,1],公式为:
scaled_value = 2 * (x - x_min)/(x_max - x_min) - 1
适合你延续之前使用MinMaxScaler的习惯,无需学习新工具。

方法3:手动实现归一化逻辑

如果需要完全自定义缩放逻辑,可以手动编写函数处理,同时规避极值相等的异常情况:

def scale_to_minus1_1(df):
    scaled_df = df.copy()
    for col in scaled_df.columns:
        col_min = scaled_df[col].min()
        col_max = scaled_df[col].max()
        # 处理列内所有值相同的情况,避免除以0
        if col_max == col_min:
            scaled_df[col] = 0
        else:
            scaled_df[col] = 2 * (scaled_df[col] - col_min) / (col_max - col_min) - 1
    return scaled_df

# 调用函数处理数据
scaled_df = scale_to_minus1_1(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:31:49