<p>可以使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.as_matrix.html" rel="noreferrer">^{<cd1>}</a>将数据帧转换为numpy数组。随机数据集上的示例:</p>
<p><strong>编辑:</strong>
根据上述<code>as_matrix()</code>文档的最后一句话,将<code>as_matrix()</code>更改为<code>values</code>,(不会更改结果):</p>
<blockquote>
<p>Generally, it is recommended to use ‘.values’.</p>
</blockquote>
<pre><code>import pandas as pd
import numpy as np #for the random integer example
df = pd.DataFrame(np.random.randint(0.0,100.0,size=(10,4)),
index=range(10,20),
columns=['col1','col2','col3','col4'],
dtype='float64')
</code></pre>
<p>注:指数为10-19:</p>
<pre><code>In [14]: df.head(3)
Out[14]:
col1 col2 col3 col4
10 3 38 86 65
11 98 3 66 68
12 88 46 35 68
</code></pre>
<p>现在<code>fit_transform</code>数据帧获得<code>scaled_features</code><code>array</code>:</p>
<pre><code>from sklearn.preprocessing import StandardScaler
scaled_features = StandardScaler().fit_transform(df.values)
In [15]: scaled_features[:3,:] #lost the indices
Out[15]:
array([[-1.89007341, 0.05636005, 1.74514417, 0.46669562],
[ 1.26558518, -1.35264122, 0.82178747, 0.59282958],
[ 0.93341059, 0.37841748, -0.60941542, 0.59282958]])
</code></pre>
<p>将缩放数据分配给数据帧(注意:使用<code>index</code>和<code>columns</code>关键字参数保留原始索引和列名:</p>
<pre><code>scaled_features_df = pd.DataFrame(scaled_features, index=df.index, columns=df.columns)
In [17]: scaled_features_df.head(3)
Out[17]:
col1 col2 col3 col4
10 -1.890073 0.056360 1.745144 0.466696
11 1.265585 -1.352641 0.821787 0.592830
12 0.933411 0.378417 -0.609415 0.592830
</code></pre>
<hr/>
<p><strong>编辑2:</strong></p>
<p>遇到了<a href="https://github.com/paulgb/sklearn-pandas" rel="noreferrer">sklearn-pandas</a>包。它的重点是使scikit更易于与熊猫一起使用。<code>sklearn-pandas</code>在需要对<code>DataFrame</code>(一种更常见的方案)的列子集应用多种类型的转换时尤其有用。这是有文档记录的,但这是实现我们刚才执行的转换的方法。</p>
<pre><code>from sklearn_pandas import DataFrameMapper
mapper = DataFrameMapper([(df.columns, StandardScaler())])
scaled_features = mapper.fit_transform(df.copy(), 4)
scaled_features_df = pd.DataFrame(scaled_features, index=df.index, columns=df.columns)
</code></pre>