我已经执行了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]]
答案 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()