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

如何在Pandas中无需转置数据集实现行标准化?

问题:如何在不转置数据集的情况下对行进行标准化(使用scikit-learn)

给定如下数据集:

value_last_1  value_last_2  value_last_3  value_last_4
53.40         91.29         106.56        34.71
131.92        81.53         70.57         31.82
0.00          0.00          21.27         12.55

使用sklearn.preprocessing.StandardScaler可轻松实现数据集的列标准化,但若要对行进行标准化,如何在不转置数据集的情况下实现?


回答

嘿,这个问题问得好!默认情况下StandardScaler确实是对列做标准化的,但要实现行标准化且不转置数据集,其实有几个简洁的办法,我给你拆解一下:

1. 使用sklearn.preprocessing.scale()函数(最简单直接的方式)

scale函数是scikit-learn提供的轻量级标准化工具,它支持通过axis参数指定标准化的维度,直接设置axis=1就能对每行进行标准化,完全不需要转置数据集。

示例代码:

import numpy as np
from sklearn.preprocessing import scale

# 加载你的数据集为numpy数组
data = np.array([
    [53.40, 91.29, 106.56, 34.71],
    [131.92, 81.53, 70.57, 31.82],
    [0.00, 0.00, 21.27, 12.55]
])

# 对每行执行标准化
row_scaled_data = scale(data, axis=1)

print("行标准化后的结果:")
print(row_scaled_data)

执行后,每行的元素会被转换为均值为0、标准差为1的分布,完全符合标准化的要求。

2. 自定义行标准化Transformer(适配Pipeline场景)

如果你需要把行标准化步骤整合到scikit-learn的Pipeline中,或者想要更灵活的控制逻辑,可以自定义一个兼容scikit-learn API的Transformer类,手动实现行标准化的逻辑,同样不需要转置。

示例代码:

import numpy as np
from sklearn.base import BaseEstimator, TransformerMixin

class RowStandardScaler(BaseEstimator, TransformerMixin):
    def fit(self, X, y=None):
        # 计算每行的均值和标准差,reshape是为了保持维度匹配
        self.means_ = X.mean(axis=1).reshape(-1, 1)
        self.stds_ = X.std(axis=1).reshape(-1, 1)
        # 处理标准差为0的情况(避免除以0错误)
        self.stds_[self.stds_ == 0] = 1.0
        return self
    
    def transform(self, X, y=None):
        # 执行行标准化:(元素 - 行均值) / 行标准差
        return (X - self.means_) / self.stds_

# 使用自定义的标准化器
scaler = RowStandardScaler()
row_scaled_data = scaler.fit_transform(data)

print("自定义标准化器处理后的结果:")
print(row_scaled_data)

这个类完全遵循scikit-learn的fit-transform模式,可以无缝和其他组件(比如Pipeline、GridSearchCV)配合使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:44:02