Подтвердить что ты не робот

Хранить структуру pandas с функциями numpy/scikit

Я использую отличную функцию 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 без потери информации?

4b9b3361

Ответ 1

A (слегка наивный) способ состоял бы в том, чтобы сохранить структуру вашего фрейма данных, то есть его столбцы и индекс, отдельно, а затем создать новый кадр данных из ваших предварительно обработанных результатов следующим образом:

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 перемешать строки/столбцы данных.

Ответ 2

Это можно сделать путем переноса возвращаемых данных в фреймворк данных с информацией index и columns.

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