将PCA的结果放入DataFrame

时间:2019-04-08 22:04:34

标签: python pandas dataframe pca

我已经执行了PCA。

我想将这些结果放在数据框中。更具体地说,我想创建一个具有两行两列的数据框(在wc_accounts上执行PCA之后的主要组件)

我尝试过:

pca = PCA(n_components=2)
principalComponents = pca.fit(wc_accounts)
data = pca.components_
print(data)
principalDf = pd.DataFrame(data , columns = ['principal component 1', 'principal component 2'])

但是,最后一行给出了错误:ValueError: Shape of passed values is (828, 2), indices imply (2, 2)

由于它太大,我无法完整打印数据。本质上,它是两个数组(长度为828)的浮点数的数组:

[[-1.57759323e-02 -1.57759323e-02 -0.00000000e+00 ... -1.57759323e-02
  -3.15518646e-02  1.57759323e-02]
 [-9.99844616e-01  2.06534552e-04  0.00000000e+00 ...  2.06534552e-04
   4.13069105e-04 -2.06534552e-04]]

2 个答案:

答案 0 :(得分:0)

看起来data的方向相对于pd.DataFrame的期望是相反的。

因此,您可以改用index然后转置:

principalDf = pd.DataFrame(data, index=['principal component 1', 'principal component 2']).T

答案 1 :(得分:0)

在您的情况下,您想使用变换数据而不是“pca.components_”,它包含定义主成分的单位向量。 有关您希望实现的目标的示例,请参见此处。

from sklearn.decomposition import PCA
df = pd.DataFrame(data=np.random.normal(0, 1, (50, 8)))
df.head()

pca     = PCA(n_components=4).fit(df)
columns = ['pca_comp_%i' % i for i in range(4)]
df_pca  = pd.DataFrame(pca.transform(df), columns=columns, index=df.index)
df_pca.head()