将数组结构转换为数据框以获取列名

时间:2018-08-16 18:51:12

标签: python pandas numpy-ndarray

我有一个数据框,已将其转换为数组,以使用回归算法对数据进行建模。我用以下代码做到了

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数据帧中列名的数据帧?

2 个答案:

答案 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数据框分配给新创建的数据框。