python - 如何在 scikit-learn 中进行预处理后保留数据帧的列标题

标签 python numpy pandas scikit-learn

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

我理解为什么会发生这种情况,因为 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/

相关文章:

python - 使用 openpyxl 保持类似 excel 的枢轴

python - 检查列表列表的函数是否具有 0 到 n 之间的所有整数元素,并且列表的长度都是给定的?

python - Pandas Concat 增加行数

python - 通过逗号和枢轴解析数据框列 - python

python - 计算字符串中的字符数,创建一个数据框列?

python - 将一列数据帧行中的列表转换为简单字符串

python - 尝试传递字符串以通过 Django Rest Framework url 进行查询

python - 有效地删除元组列表中的部分重复项

python - 在 python 中创建具有多个可变向量属性的类

python - Numpy 与 Python 的 Decimal 参数