Sklearn Scaler输出行为

时间:2018-04-29 21:07:27

标签: python pandas scikit-learn data-processing

我有一种情况,我想将sklearn的StandardScaler对象应用于我的数据帧的一列。代码如下:

import pandas as pd
from sklearn.preprocessing import StandardScaler

df = pd.DataFrame([(1,2,3), (2,3,4), (3,4,5)], columns=['a','b','c'])
scaler = StandardScaler().fit(df['c'].values.reshape(-1,1))
df['d'] = df['c'].apply(scaler.transform)
df

当我缩放列c并将结果输出到列d时,d中的值看起来像[[-1.224744871391589]],形状为(1,1)

我原本期望输出值是一个数值,而不是如上所示的列表。我当然可以通过df['d'] = df['d'].apply(lambda x: x[0][0])的方式做一些事情,但如果没有必要,我想避免这些额外的复杂情况。

我是否错误地使用了缩放器对象,或者这是解决它的唯一方法吗?提前谢谢!

1 个答案:

答案 0 :(得分:2)

自定义是首先实例化trasformer / estimator,然后进行拟合和变换。以下是输出的几个小变化:

import pandas as pd
from sklearn.preprocessing import StandardScaler

df = pd.DataFrame([(1,2,3), (2,3,4), (3,4,5)], columns=['a','b','c'])

scaler = StandardScaler()

scaler.fit(df['c'].values.reshape(-1,1))

df['d'] = scaler.transform(df['c'].values.reshape(-1,1))
df

Out[84]: 
   a  b  c         d
0  1  2  3 -1.224745
1  2  3  4  0.000000
2  3  4  5  1.224745