我有一个数据框,已将其转换为数组,以使用回归算法对数据进行建模。我用以下代码做到了
X=df.iloc[:, 0:345].values
Y=df.iloc[:,345].values
因此X和Y现在是数组。有很多列,因为类别变量已被创建为伪变量。此外,我创建训练并测试分组
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
X_train,X_test,y_train,y_test=train_test_split(X,Y,test_size=0.25,random_state=0)
现在,在我完成模型构建并做出预测之后,我想找回我的分类变量的值(在为所有分类变量创建了虚拟变量之后创建了X和Y)。为此,我正在尝试将我的X_test转换回原始数据帧df中具有列名的数据帧。我尝试了以下代码
dff=df.iloc[:, 0:345]
上面的语句是获取(数据帧的)前345列。
然后
pd.DataFrame(X_test, index=dff.index, columns=dff.columns)
我收到以下错误
ValueError: Shape of passed values is (345, 25000), indices imply (345, 100000)
我不明白为什么有多少行很重要。我的行数较少,因为我的火车和考试已分成75%-25%。而且我正在将数据转换为数组后执行拆分。现在如何将数组数据转换为具有DFF数据帧中列名的数据帧?
答案 0 :(得分:0)
我建议将DataFrame用于train_test_split
,然后使用numpy将数组传递给您的算法:
my_algorithm(np.asarray(X_train), np.asarray(y_train))
这样,您可以像处理任何df一样查看数据,但是可以使用数组运行模型。我不确定您使用的是哪个库-但我很确定某些库现在可以使用DataFrames进行建模。
答案 1 :(得分:0)
pd.DataFrame(X_test, index=dff.index, columns=dff.columns)
X_test
是一个numpy.ndarray
将以上声明修改为:
df_new=pd.DataFrame(X_test)
df_new.columns=list(dff.columns)
新数据框包含X_test
数据,列名也从dff
数据框分配给新创建的数据框。