2013-02-11 11 views
11

Sto utilizzando la funzione eccellente read_csv() da panda, che dà:Conservare con le funzioni NumPy/scikit

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) 

ma quando applico una funzione da scikit-learn perdo le informazioni sulle colonne:

from sklearn import preprocessing 
preprocessing.scale(data) 

fornisce una matrice numpy.

C'è un modo per applicare la funzione scikit o numpy a DataFrames senza perdere le informazioni?

risposta

8

A (leggermente naive) modo sarebbe quello di memorizzare la struttura del frame di dati, cioè le colonne e l'indice, separatamente, e quindi creare un nuovo frame di dati dai risultati pretrattati modo:

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 

Come si può vedere in Out[22], iniziamo con una cornice dati, quindi in In[29] inseriamo alcuni nuovi dati all'interno della cornice, lasciando invariate le righe e le colonne. Sto presupponendo che il tuo preelaborazione sarà not mischiare le righe/colonne dei dati.

15

questo può essere fatto avvolgendo i dati restituiti in un dataframe, con index e columns informazioni.

import pandas as pd 
pd.DataFrame(preprocessing.scale(data), index = data.index, columns = data.columns) 
Problemi correlati