2013-02-11 12 views
11

używam doskonałą read_csv() funkcję z pandy, co daje:Przechowywać struktura pandy z funkcji 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) 

ale kiedy zastosować funkcję z scikit-learn stracę informacje o kolumnach:

from sklearn import preprocessing 
preprocessing.scale(data) 

podaje tablicę numpy.

Czy istnieje sposób zastosowania funkcji scikit lub numpy do DataFrames bez utraty informacji?

Odpowiedz

8

A (nieco naiwne) sposobem byłoby przechowywać strukturę ramki danych, to znaczy jego kolumn i indeksu, oddzielnie, a następnie utworzyć nową ramkę danych z wstępnie przygotowane wyników tak:

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 

Jak widać w Out[22], rozpoczynamy od ramki danych, a następnie w In[29] umieszczamy nowe dane wewnątrz ramki, pozostawiając wiersze i kolumny niezmienione. Zakładam, że Twój preprocesor przeprowadzi przetasowanie wierszy/kolumn danych.

15

Można to zrobić poprzez owinięcie zwróconych danych w dataframe z index i columns informacji.

import pandas as pd 
pd.DataFrame(preprocessing.scale(data), index = data.index, columns = data.columns) 
Powiązane problemy