我想将缩放比例(使用来自sklearn.preprocessing的StandardScaler())应用于熊猫数据框。以下代码返回一个numpy数组,因此我丢失了所有列名和索引。这不是我想要的。
features = df[["col1", "col2", "col3", "col4"]]
autoscaler = StandardScaler()
features = autoscaler.fit_transform(features)
我在网上找到的“解决方案”是:
features = features.apply(lambda x: autoscaler.fit_transform(x))
它似乎可以工作,但是会导致弃用警告:
/usr/lib/python3.5/site-packages/sklearn/preprocessing/data.py:583:DeprecationWarning:在数据中0.1d中弃用一维数组,在0.19中会引发ValueError。如果数据具有单个功能,则使用X.reshape(-1,1)来重塑数据,如果包含单个样本,则使用X.reshape(1,-1)来重塑数据。
因此,我尝试:
features = features.apply(lambda x: autoscaler.fit_transform(x.reshape(-1, 1)))
但这给出了:
追溯(最近一次通话最近):文件“ ./analyse.py”,第91行,在features = features.apply(lambda x:autoscaler.fit_transform(x.reshape(-1,1)))中,文件“ / usr / lib / python3.5 / site-packages / pandas / core / frame.py“,第3972行,在apply返回self._apply_standard(f,axis,reduce = reduce)文件” /usr/lib/python3.5/site-包/pandas/core/frame.py”,第408行,在_apply_standard结果= self._constructor(data = results,index = index)文件“ /usr/lib/python3.5/site-packages/pandas/core/frame”中.py“,第226行, init mgr = self._init_dict(数据,索引,列,dtype = dtype)文件“ /usr/lib/python3.5/site-packages/pandas/core/frame.py”,第363行,在_init_dict dtype = dtype中) “ /usr/lib/python3.5/site-packages/pandas/core/frame.py”,第5163行,在_arrays_to_mgr数组中= _homogenize(数组,索引,dtype)文件“ /usr/lib/python3.5/site _homogenize的-packages / pandas / core / frame.py“行5477,raise_cast_failure = False)文件_sanitize_array的文件” /usr/lib/python3.5/site-packages/pandas/core/series.py“,行2885引发异常(“数据必须为一维”)异常:数据必须为一维
如何对熊猫数据框应用缩放,而保持数据框完整?如果可能,不复制数据。