【发布时间】:2018-09-19 18:52:05
【问题描述】:
背景
scikit-learn API 基于有状态对象,它将 2D numpy 数组作为输入,计算转换(在对象内部,在对象内部),然后将其应用于其他 2D 数组。例如:
arr = np.arange(4).reshape(2,2)
scaler = sklearn.preprocessing.StandardScaler()
scaler.fit(arr) # scaler state has changed, nothing returns
scaler.transform(arr) # a transformed version of arr returns
我的问题
我想对存储在pandas DataFrame 中的数据应用转换,并将转换后的数据放回同一个 DataFrame。
问题在于df.apply(scaler.transform) 将数据逐列(一维数组)输入到缩放器中,其中缩放器需要一个二维数组。
transformed_array = scaler.transform(df.values)
transformed_df = pd.DataFrame(data=transformed_array, index=df.index, columns=df.columns)
但这似乎相当笨重且效率低下。另外,我觉得在极端情况下我会丢失 DataFrame 的元数据。
有没有更好的办法?
【问题讨论】:
标签: pandas numpy scikit-learn