13

私はread_csv()pandas の優れた機能を使用しています。

In [31]: data = pandas.read_csv("lala.csv", delimiter=",")

In [32]: data
Out[32]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 12083 entries, 0 to 12082
Columns: 569 entries, REGIONC to SCALEKER
dtypes: float64(51), int64(518)

しかし、scikit-learn の関数を適用すると、列に関する情報が失われます。

from sklearn import preprocessing
preprocessing.scale(data)

numpy 配列を与えます。

情報を失うことなく、scikit または numpy 関数を DataFrames に適用する方法はありますか?

4

2 に答える 2

19

これは、返されたデータをデータフレームにラップしindexcolumns情報を含むことで実行できます。

import pandas as pd
pd.DataFrame(preprocessing.scale(data), index = data.index, columns = data.columns) 
于 2013-02-11T14:37:44.550 に答える
9

(少し素朴な) 方法は、データ フレームの構造、つまりその列とインデックスを別々に保存し、次のように前処理された結果から新しいデータ フレームを作成することです。

In [15]: data = np.zeros((2,2))

In [16]: data
Out[16]: 
array([[ 0.,  0.],
       [ 0.,  0.]])

In [17]: from pandas import DataFrame

In [21]: df  = DataFrame(data, index = ['first', 'second'], columns=['c1','c2'])

In [22]: df
Out[22]: 
        c1  c2
first    0   0
second   0   0

In [26]: i = df.index

In [27]: c = df.columns

# generate new data as a numpy array    
In [29]: df  = DataFrame(np.random.rand(2,2), index=i, columns=c)

In [30]: df
Out[30]: 
              c1        c2
first   0.821354  0.936703
second  0.138376  0.482180

でわかるようにOut[22]、データ フレームから始めてIn[29]、フレーム内に新しいデータを配置し、行と列を変更しません。not前処理によってデータの行/列がシャッフルされると想定しています。

于 2013-02-11T14:11:00.817 に答える