我有一个 Pandas 数据框,其中包含一些行和列。每列都有一个标题。现在,只要我继续在 Pandas 中进行数据操作,就可以保留我的变量 header 。但是,如果尝试使用Sci-kit-learn lib的某些数据预处理功能,最终将丢失所有 header ,并且帧将转换为仅数字矩阵。

我知道为什么会这样,因为scikit-learn给出了一个numpy ndarray作为输出。而且numpy ndarray只是矩阵而不会具有列名。

但这是事情。如果我要在数据集上构建一些模型,即使在对初始数据进行了预处理并尝试了某些模型之后,我可能还必须执行更多的数据操作任务,以运行其他模型以更好地拟合。无法访问列标题使操作变得困难,因为我可能不知道特定变量的索引是什么,但是记住变量名甚至通过执行df.columns都更容易。

如何克服呢?

EDIT1:使用样本数据快照进行编辑。

    Pclass  Sex Age SibSp   Parch   Fare    Embarked
0   3   0   22  1   0   7.2500  1
1   1   1   38  1   0   71.2833 2
2   3   1   26  0   0   7.9250  1
3   1   1   35  1   0   53.1000 1
4   3   0   35  0   0   8.0500  1
5   3   0   NaN 0   0   8.4583  3
6   1   0   54  0   0   51.8625 1
7   3   0   2   3   1   21.0750 1
8   3   1   27  0   2   11.1333 1
9   2   1   14  1   0   30.0708 2
10  3   1   4   1   1   16.7000 1
11  1   1   58  0   0   26.5500 1
12  3   0   20  0   0   8.0500  1
13  3   0   39  1   5   31.2750 1
14  3   1   14  0   0   7.8542  1
15  2   1   55  0   0   16.0000 1

上面基本上是 Pandas 数据帧。现在,当我在此数据帧上执行此操作时,它将删除列标题。
from sklearn import preprocessing
X_imputed=preprocessing.Imputer().fit_transform(X_train)
X_imputed

新数据为numpy数组,因此将删除列名称。
array([[  3.        ,   0.        ,  22.        , ...,   0.        ,
          7.25      ,   1.        ],
       [  1.        ,   1.        ,  38.        , ...,   0.        ,
         71.2833    ,   2.        ],
       [  3.        ,   1.        ,  26.        , ...,   0.        ,
          7.925     ,   1.        ],
       ...,
       [  3.        ,   1.        ,  29.69911765, ...,   2.        ,
         23.45      ,   1.        ],
       [  1.        ,   0.        ,  26.        , ...,   0.        ,
         30.        ,   2.        ],
       [  3.        ,   0.        ,  32.        , ...,   0.        ,
          7.75      ,   3.        ]])

因此,当我对pandas数据框进行一些数据操作时,我想保留列名。

最佳答案

scikit-learn实际上在大多数情况下会剥离列标题,因此只需在之后添加它们即可。在您的示例中,将X_imputed作为sklearn.preprocessing输出,并将X_train作为原始数据帧,可以使用以下命令重新放置列标题:

X_imputed_df = pd.DataFrame(X_imputed, columns = X_train.columns)

关于python - 在scikit-learn中进行预处理后如何保留数据帧的列标题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29586323/

10-12 21:33
查看更多