python - 当我尝试构建 PCA 图时,出现以下错误: ValueError: too many values to unpack (expected 2)
问题描述
我正在尝试构建一个 pca 图并且我编写了这个程序。但由于某种原因,我得到了一张空白图表。我该如何解决这个问题?
import pandas as pd
X = pd.read_csv('ANNCitydata.csv')
# load dataset into Pandas DataFrame
X1 = X.drop(['ID','City'], axis=1)
y = pd.read_csv('ANNCitydata.csv', usecols=["City"])
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
principalComponents = pca.fit_transform(X1)
principalDf = pd.DataFrame(data = principalComponents
, columns = ['principal component 1', 'principal component 2'])
finalDf = pd.concat([principalDf, y[['City']]], axis = 1)
import matplotlib.pyplot as plt
fig = plt.figure(figsize = (10,10))
ax = fig.add_subplot(1,1,1)
ax.set_xlabel('Principal Component 1', fontsize = 15)
ax.set_ylabel('Principal Component 2', fontsize = 15)
ax.set_title('2 component PCA', fontsize = 20)
targets = ('Houston', 'St. Louis', 'Waterloo')
colors = ('r', 'g', 'b')
for data, target, color in zip(finalDf,targets,colors):
X1, y = data
ax.scatter(X1, y, alpha=0.8, c=color, edgecolors='none', s=100, label=target)
ax.legend(targets)
ax.grid()
plt.show()
我收到的错误消息
ValueError: too many values to unpack (expected 2)
解决方案
您的finalDf
变量是一个 DataFrame,只有一个,您告诉 python 将其内部值解压缩为两个,x
并且y
. 所以 python期望看到数据对的迭代(就像你有一个包含三个迭代的元组zip(finalDf,targets,colors)
),但它一次只找到一个。
您可以进行健全性检查以查看其中的确切内容data
,方法是
print(data)
print(type(data))
在本地(Python 3.6)新创建的 DataFrame 中执行这种循环,我发现一个简单的 for 循环只给了我列名。
for data in df:
print(data)
# street
# city
# zip
# state
# beds
# baths
# sq__ft
# type
# sale_date
# price
# latitude
# longitude
我可能是错的,但我想你想从列中获取值x
,y
一次一个,在那里。为此,您可以替换finalDf
为finalDf.itertuples()
,这将data
成为一个 n 大小的元组,n 是 中的列数finalDf
。您将有一个命名元组,因此X1
和y
成为data.x
and data.y
,假设x
andy
是您的列的名称。
for data, target, color in zip(finalDf.itertuples(),targets,colors):
X1, y = data.x, data.y
ax.scatter(X1, y, alpha=0.8, c=color, edgecolors='none', s=100, label=target)
推荐阅读
- java - java错误:不一致的数据类型:预期的NUMBER得到了BINARY
- cookies - js-cookie 相同站点和 httpOnly
- python - 各种深度的列表子列表的排列,同时在 Python 上保持它们分开
- java - SpringBoot 2.1.9.RELEASE——读取资源文件
- mysql - 为什么 MySQL 不应该从失败/回滚的事务中恢复主键?
- azure - 是否有替代 Set-AzSqlInstanceDatabaseBackupShortTermRetentionPolicy 的 REST API?
- php - Laravel - 资源上的 whenLoaded() 和 count()
- asynchronous - 对于网络绑定的 IO,在较差的网络条件下,异步的好处是否更大?
- kubernetes - Kubectl 缺少 Terraform Cloud
- sparql - 连接两组 URI 时 SparQL 查询速度慢