-1
我试图复制找到here的PCA示例,但试图运行pca_summary()时出现以下错误,任何想法都不胜感激。谢谢!使用python sckit-learn进行PCA分析 - 输入错误
raise TypeError("data argument can't be an iterator")
TypeError: data argument can't be an iterator
我试图复制找到here的PCA示例,但试图运行pca_summary()时出现以下错误,任何想法都不胜感激。谢谢!使用python sckit-learn进行PCA分析 - 输入错误
raise TypeError("data argument can't be an iterator")
TypeError: data argument can't be an iterator
这是zip
引起的常见问题。
这是因为zip
在python 3中改变了,它现在返回一个迭代器。
在pca_summary
功能做到这一点:
def pca_summary(pca, standardised_data, out=True):
names = ["PC"+str(i) for i in range(1, len(pca.explained_variance_ratio_)+1)]
a = list(np.std(pca.transform(standardised_data), axis=0))
b = list(pca.explained_variance_ratio_)
c = [np.sum(pca.explained_variance_ratio_[:i]) for i in range(1, len(pca.explained_variance_ratio_)+1)]
columns = pd.MultiIndex.from_tuples([("sdev", "Standard deviation"), ("varprop", "Proportion of Variance"), ("cumprop", "Cumulative Proportion")])
summary = pd.DataFrame(list(zip(a, b, c)), index=names, columns=columns)
if out:
print("Importance of components:")
display(summary)
return summary
所以只需更换
summary = pd.DataFrame(zip(a, b, c), index=names, columns=columns)
summary = pd.DataFrame(list(zip(a, b, c)), index=names, columns=columns)
您正在使用什么版本的Python用? – DavidG
我正在使用3.6.0 –
我可以使用python 3.6重现错误。它似乎是在pca_summary函数内的这行:summary = pd.DataFrame(zip(a,b,c),index = names,columns = columns)导致python 3.6中的问题。 – sera