回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想将scaling(使用sklearn.preprocessing中的StandardScaler())应用于pandas数据帧。下面的代码返回一个numpy数组,因此我丢失了所有的列名和索引。这不是我想要的。</p>
<pre><code>features = df[["col1", "col2", "col3", "col4"]]
autoscaler = StandardScaler()
features = autoscaler.fit_transform(features)
</code></pre>
<p>我在网上找到的一个“解决方案”是:</p>
<pre><code>features = features.apply(lambda x: autoscaler.fit_transform(x))
</code></pre>
<p>它似乎起作用,但会导致一个弃用警告:</p>
<blockquote>
<p>/usr/lib/python3.5/site-packages/sklearn/preprocessing/data.py:583:
DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17
and will raise ValueError in 0.19. Reshape your data either using
X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1)
if it contains a single sample.</p>
</blockquote>
<p>因此我试图:</p>
<pre><code>features = features.apply(lambda x: autoscaler.fit_transform(x.reshape(-1, 1)))
</code></pre>
<p>但这给了我们:</p>
<blockquote>
<p>Traceback (most recent call last): File "./analyse.py", line 91, in
features = features.apply(lambda x: autoscaler.fit_transform(x.reshape(-1, 1))) File
"/usr/lib/python3.5/site-packages/pandas/core/frame.py", line 3972, in
apply
return self._apply_standard(f, axis, reduce=reduce) File "/usr/lib/python3.5/site-packages/pandas/core/frame.py", line 4081, in
_apply_standard
result = self._constructor(data=results, index=index) File "/usr/lib/python3.5/site-packages/pandas/core/frame.py", line 226, in
<strong>init</strong>
mgr = self._init_dict(data, index, columns, dtype=dtype) File "/usr/lib/python3.5/site-packages/pandas/core/frame.py", line 363, in
_init_dict
dtype=dtype) File "/usr/lib/python3.5/site-packages/pandas/core/frame.py", line 5163, in
_arrays_to_mgr
arrays = _homogenize(arrays, index, dtype) File "/usr/lib/python3.5/site-packages/pandas/core/frame.py", line 5477, in
_homogenize
raise_cast_failure=False) File "/usr/lib/python3.5/site-packages/pandas/core/series.py", line 2885,
in _sanitize_array
raise Exception('Data must be 1-dimensional') Exception: Data must be 1-dimensional</p>
</blockquote>
<p>如何对pandas数据帧应用缩放,使数据帧保持完整?如果可能的话不复制数据。</p>