使用numpy/scikit函数保持panda结构



我使用的是Panda出色的read_csv()函数,它提供:

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?

这可以通过将返回的数据包装在数据帧中,并在.中包含indexcolumns信息来实现

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

一种(略显天真)的方法是分别存储数据帧的结构,即其列和索引,然后根据预处理的结果创建一个新的数据帧,如下所示:

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打乱数据的行/列。

相关内容

  • 没有找到相关文章

最新更新