【发布时间】:2018-04-29 21:07:26
【问题描述】:
我有一种情况,我想将 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]) 那样做一些事情来解决它,但如果没有必要,我想避免这种额外的复杂情况。
我是否错误地使用了缩放器对象,或者这是解决它的唯一方法?提前致谢!
【问题讨论】:
-
apply()将该列的单个值作为缩放器的输入。scaler.transform()的输出形状为[n_samples,n_columns]。所以它作为 [1,1] 数组正确返回。所以这里没有解决方法。请参阅@KRKirov 答案的最后一行以获得转换列的正确方法。
标签: python pandas scikit-learn data-processing