【发布时间】:2020-06-02 19:15:36
【问题描述】:
我正在尝试在跨多列的数组行上构建主成分-
import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.decomposition import PCA
df = pd.DataFrame(np.random.randn(5, 10), columns=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])
df['arr1'] = df[['a', 'b', 'c', 'd', 'e']].values.tolist()
df['arr2'] = df[['f', 'g', 'h', 'i', 'j']].values.tolist()
df['arr1'] = [preprocessing.scale(row) for row in df['arr1']]
df['arr2'] = [preprocessing.scale(row) for row in df['arr2']]
df
X = df.loc[:, 'arr1':'arr2']
pca = PCA(.95)
pca.fit(X)
pca.transform(X)
这给出了错误-
ValueError: setting an array element with a sequence.
我尝试通过np.array(list(df.arr1)) 转换 arr1 和 arr2 但这只是保留了每个数组的第一个值。
在我的真实数据集中,每个数组有 200-300 个元素。
【问题讨论】:
-
我猜错误出现在
df[['a', 'b', 'c', 'd', 'e']].values.tolist()行上,这是一个序列,因此您无法为其设置数据框列。多描述一下你的数据。这些列是什么?您想通过df[['a', 'b', 'c', 'd', 'e']].values.tolist()实现什么目标? -
尝试使用
df[['a', 'b', 'c', 'd', 'e']].values而不是df[['a', 'b', 'c', 'd', 'e']].values.tolist()。你会得到一个二维数组而不是一个列表。 -
@manu190466 给出错误-ValueError: 传递的项目数错误 5,位置意味着 1