You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sklearn/PCA将高维向量转换为2维时遭遇数据错误

解决PCA降维时的"setting an array element with a sequence"错误

问题原因

PCA的fit_transform()方法要求输入是形状为(n_samples, n_features)的二维数值型数组/矩阵,但你的DataFrame是(45129,1)的结构,vector列的每个元素是300维列表(object类型),这种嵌套的列表结构无法被PCA解析,才会抛出float() argument must be a string or a number, not 'list'和后续的序列赋值错误。

解决方案

你需要先把嵌套的列表列转换成标准的二维数值矩阵,再传入PCA处理,具体步骤如下:

1. 读取数据并转换特征矩阵

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA

# 读取原始数据
data = pd.read_parquet('1.parquet', engine='fastparquet')

# 将vector列的列表转换成二维数组(核心步骤)
# 方法1:用numpy直接转换
features = np.array(data['vector'].tolist())

# 方法2:用pandas展开成多列(得到DataFrame格式的特征矩阵)
# features = pd.DataFrame(data['vector'].tolist())

# 验证转换后的形状:应该是(45129, 300)
print(f"转换后特征矩阵形状:{features.shape}")

2. 执行PCA降维

# 初始化PCA,指定降维到2维
pca = PCA(n_components=2)
# 对特征矩阵执行降维
reduced = pca.fit_transform(features)

# 可选:将降维结果转成DataFrame,方便后续分析/可视化
reduced_df = pd.DataFrame(reduced, columns=['PC1', 'PC2'])
print(reduced_df.head())

额外检查

转换后可以确认特征矩阵的类型,确保是数值型:

print(f"特征矩阵数据类型:{features.dtype}")

如果输出是float64或int64,就说明格式正确了。

内容的提问来源于stack exchange,提问作者xzk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:27:57