<p>正如pir的注释中提到的那样,<code>.apply(lambda el: scale.fit_transform(el))</code>方法将产生以下警告:</p>
<blockquote>
<p>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>将列转换为numpy数组应该可以完成这项工作(我更喜欢StandardScaler):<s/></p>
<pre><code>from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
dfTest[['A','B','C']] = scale.fit_transform(dfTest[['A','B','C']].as_matrix())
</code></pre>
<p>--<b>编辑</b>2018年11月(熊猫测试<strong>0.23.4</strong>)--</p>
<p>正如Rob Murray在评论中提到的,在当前(v0.23.4)版本的pandas中,<code>.as_matrix()</code>返回<code>FutureWarning</code>。因此,应该用<code>.values</code>代替:</p>
<pre><code>from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit_transform(dfTest[['A','B']].values)
</code></pre>
<p>--<b>编辑</b>2019年5月(熊猫测试<strong>0.24.2</strong>)--</p>
<p>正如joelostblom在评论中提到的,“由于<code>0.24.0</code>,建议使用<code>.to_numpy()</code>,而不是<code>.values</code>。”</p>
<p>更新示例:</p>
<pre><code>import pandas as pd
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
dfTest = pd.DataFrame({
'A':[14.00,90.20,90.95,96.27,91.21],
'B':[103.02,107.26,110.35,114.23,114.68],
'C':['big','small','big','small','small']
})
dfTest[['A', 'B']] = scaler.fit_transform(dfTest[['A','B']].to_numpy())
dfTest
A B C
0 -1.995290 -1.571117 big
1 0.436356 -0.603995 small
2 0.460289 0.100818 big
3 0.630058 0.985826 small
4 0.468586 1.088469 small
</code></pre>