使用 StandardScaler() 规范化 pandas 数据帧,不包括特定列

Posted

技术标签:

【中文标题】使用 StandardScaler() 规范化 pandas 数据帧,不包括特定列【英文标题】:Normalising pandas data frame using StandardScaler() excluding a particular column 【发布时间】:2017-01-07 20:54:15 【问题描述】:

所以我有一个数据框,它是通过合并训练(标记)和测试(未标记)数据框形成的。为了取消附加测试数据框,如果该行属于训练或测试,我保留了一个具有标识符的列。 现在我必须规范化所有列中的所有值,除了这一列“Sl No.”。但我没有找到任何方法来传递这一列。 这就是我正在做的事情

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler

data_norm = data_x_filled.copy() #Has training + test data frames combined to form single data frame
normalizer = StandardScaler()
data_array = normalizer.fit_transform(data_norm)
data_norm = pd.DataFrame(data_array,columns = data_norm.columns).set_index(data_norm.index)

我只想排除“Sl 号”列。进行归一化,但希望在归一化后保留。

【问题讨论】:

【参考方案1】:

试试这个它可能会使用numpy作为np

data_norm = data_x_filled.copy() #Has training + test data frames combined to form single data frame
normalizer = StandardScaler()
data_array = normalizer.fit_transform(data_norm.ix[:,data_norm.columns!='SI No'])
data_norm = pd.DataFrame(np.column_stack((data_norm['SI No'].values,data_array)),columns = data_norm.columns).set_index(data_norm.index)

【讨论】:

这行得通:)。我用您的解决方案替换了我的解决方案,因为我基本上是在删除列,并且在所有处理之后将其添加回来。这更短更优雅。 @Shivendra 很高兴可以帮助你:)。

以上是关于使用 StandardScaler() 规范化 pandas 数据帧,不包括特定列的主要内容,如果未能解决你的问题,请参考以下文章

使用 StandardScaler 时的 SparseVector 与 DenseVector

sklearn standardscaler transform VS fit_transform 输出

预处理数据:sklearn StandardScaler和scipy whiten的区别

添加了Standardscaler但在交叉验证和相关矩阵中收到错误

在 3D 数据上使用 Standardscaler

sklearn 数据预处理