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

如何使用Pandas对数据集按行实现[-1,+1]区间归一化

逐行归一化到[-1,1]区间实现方法

你原有的代码逻辑是逐列计算列内绝对值最大值,再做除法实现列维度的[-1,1]缩放,要改成逐行归一化,只需要把统计最大值的维度从列切换为行即可,不需要逐列循环,以下是两种可直接运行的实现方案:

方案1:纯Pandas实现(无额外依赖,执行效率高)

核心是通过axis=1参数指定逐行计算绝对值最大值,利用pandas的广播机制直接完成整表运算,同时兼容全0行的除0报错问题:

import pandas as pd
df = pd.read_csv('/-----.csv')
df_max_scaled = df.copy()

# 逐行计算每行的绝对值最大值
row_abs_max = df_max_scaled.abs().max(axis=1)
# 处理全0行:避免除以0报错,全0行归一化结果仍为0
row_abs_max[row_abs_max == 0] = 1
# 按行做除法缩放
df_max_scaled = df_max_scaled.div(row_abs_max, axis=0)

方案2:调用sklearn预处理模块实现

sklearn.preprocessing.MaxAbsScaler原生就是用来将数据缩放到[-1,1]区间的工具,默认按列计算缩放规则,要逐行归一化只需要对数据做转置后缩放,再转置回原结构即可:

from sklearn import preprocessing
import pandas as pd
df = pd.read_csv('/-----.csv')

scaler = preprocessing.MaxAbsScaler()
# 转置后做列归一化等价于原数据的行归一化,缩放完成后再转置回来
df_max_scaled = pd.DataFrame(
    scaler.fit_transform(df.T).T,
    index=df.index,
    columns=df.columns
)

注意:如果你的数据表包含字符串、时间类非数值列,需要先将非数值列拆分出去,仅对数值类型的列执行归一化操作,否则会触发类型计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:43:10