Mantener la estructura de los pandas con funciones numpy / scikit

Estoy usando la excelente función read_csv() de pandas, que proporciona:

 In [31]: data = pandas.read_csv("lala.csv", delimiter=",") In [32]: data Out[32]:  Int64Index: 12083 entries, 0 to 12082 Columns: 569 entries, REGIONC to SCALEKER dtypes: float64(51), int64(518) 

pero cuando aplico una función de scikit-learn, pierdo la información sobre las columnas:

 from sklearn import preprocessing preprocessing.scale(data) 

Da una matriz numpy.

¿Hay alguna forma de aplicar la función de scikit o numpy a los DataFrames sin perder la información?

Una forma (ligeramente ingenua) sería almacenar la estructura de su dataframe, es decir, sus columnas e índice, por separado, y luego crear un nuevo dataframe a partir de sus resultados preprocesados, como:

 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 

Como puede ver en Out[22] , comenzamos con un dataframe, y luego en In[29] colocamos algunos datos nuevos dentro del marco, sin modificar las filas y columnas. Estoy asumiendo que su preprocesamiento not barajará las filas / columnas de los datos.

Esto se puede hacer envolviendo los datos devueltos en un dataframe, con información de index y columns .

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