将model.predict()的结果与原始的pandas DataFrame进行合并?
将model.predict()的结果与原始的pandas DataFrame进行合并?
我正在尝试将predict
方法的结果与原始数据合并到一个pandas.DataFrame
对象中。
from sklearn.datasets import load_iris from sklearn.cross_validation import train_test_split from sklearn.tree import DecisionTreeClassifier import pandas as pd import numpy as np data = load_iris() # 请耐心等待下面的步骤...我试图向你展示我的数据对象的结构...即我如何从原始数据转换为实际数据矩阵,而不是鸢尾花数据集 # 将特征矩阵放入dataframe的列格式中 df = pd.DataFrame(data = data.data) # 添加结果变量 df['class'] = data.target X = np.matrix(df.loc[:, [0, 1, 2, 3]]) y = np.array(df['class']) # 最后,划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.8) model = DecisionTreeClassifier() model.fit(X_train, y_train) # 我现在有了预测结果 y_hats = model.predict(X_test)
为了将这些预测结果与原始的df
合并,我尝试如下操作:
df['y_hats'] = y_hats
但是会引发如下错误:
ValueError: Length of values does not match length of index
我知道我可以将df
分成train_df
和test_df
来解决这个问题,但实际上,我需要按照上述路径来创建矩阵X
和y
(我的实际问题是一个文本分类问题,在将特征矩阵拆分为训练集和测试集之前,我需要对整个特征矩阵进行归一化)。我应该如何将这些预测值与df
中相应的行对齐,因为y_hats
数组是从零开始索引的,而看起来关于哪些行包含在X_test
和y_test
中的所有信息都丢失了?还是说我只能先将数据框拆分为训练集和测试集,然后再构建特征矩阵?我希望只需要在数据框中的训练集行中填充np.nan
值。