我有一个 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/